【发布时间】:2016-09-15 15:19:05
【问题描述】:
我是 JavaScript 新手,不知道如何编写大量的 eventHandler,例如 mouseover/mouseout。
想象一下,我必须在页面上键入元素。每个元素都应该触发一个特定的事件。我是否必须为每个元素编写每个函数,或者有一种方法可以将它们抽象出来,以便它们由另一个函数生成。
这是一个包含两个元素的两个列表的示例,但是我正在考虑每个列表有数百个元素的情况。
<!-- List 1 -->
<div id="a">the A</div>
<div id="b">the B</div>
<!-- List 2 -->
<div id="i">the I</div>
<div id="j">the J</div>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script>
$( '#a' )
.mouseover(function() {
$( '#i' ).css("color", "red")
})
.mouseout(function() {
$( '#i' ).css("color", "black")
})
$( '#b')
.mouseover(function() {
$( '#j' ).css("color", "red")
})
.mouseout(function() {
$( '#j' ).css("color", "black")
})
$( '#j')
.mouseover(function() {
$( '#a' ).css("color", "red")
$( '#i' ).css("color", "red")
})
.mouseout(function() {
$( '#a' ).css("color", "black")
$( '#i' ).css("color", "black")
})
</script>
我怎样才能简单地使用这样的数组,它代表我想要的交互:
var todo = [
[a, [i]],
[b, [j]],
[j, [a, i]]
]
还有一个可以同时实现它们的函数:
makeAllMouseover(todo)
我想我遗漏了一些关于 html/js 的非常明显的东西,但我不知道是什么/为什么...
【问题讨论】:
-
考虑到多人回答这个问题所付出的努力,我有点惊讶你根本没有评论、投票或接受任何答案。 TBH 有点令人失望!
-
我仍在尝试不同的答案:p。考虑到反对票的数量,我有点不知道该怎么办......
-
忽略反对票。选择最适合你的。如果您出于某种原因需要您的
todo数组,请选择@JamieBarker 的答案。如果您只是 认为 这就是您所需要的,但很乐意在您的 html 中添加一些标记,而不是使用我的。两者都可以正常工作。我想说的是不要使用需要switch的那个,也不要使用每次鼠标悬停/移出时循环整个数组的那个。
标签: javascript jquery mouseover