这可能很简单,答案可能很明显,但我在这里画一个空白。
我有一个HTML元素数组,我将.hover()事件绑定到。我需要知道事件使用了什么数组索引。
那么让我们说元素[7]是悬而未决的,我如何将数字7传递给该函数?
以下是我正在使用的内容:
for (i=0; i<statecount; i++) {
$("#"+imagemap[i][0]).hover(function() {
// Mouse enters HTML element
alert(i);
// "i" returns 15, which makes sense because "i"
// has changed since this function was defined.
});
}
答案 0 :(得分:2)
使用闭包作为保存状态的包装。
for (i = 0; i < statecount; i+=1)
{
(function(i){
$('#'+imagemap[i][0]).hover(function () {
alert(i);
});
}(i));
}
答案 1 :(得分:1)
虽然这不能解答您的问题,但您可以使用函数内的this
来处理悬停在其上的对象:
for (i=0; i<statecount; i++) {
$("#"+imagemap[i][0]).hover(function() {
alert(this);
}
}
如果需要JQuery对象,可能需要使用$(this)
。
答案 2 :(得分:1)
如果你使用的是&gt; = jQuery 1.6,$.proxy
会讨论参数:
$.proxy(function(a, b, c) { ... }, this, 'argA', 'argB', 'argC');
所以你可以这样写:
for (i=0; i<statecount; i++) {
$("#"+imagemap[i][0]).hover($.proxy(function(index, event) {
// Mouse enters HTML element
alert(index);
}, this, i));
}
请注意,这会将事件推送到参数列表的末尾。
答案 3 :(得分:0)
小心,因为这很容易搞砸:
var hoverer = function(i) {
return function() {
alert(i);
};
};
for (i=0; i<statecount; i++) {
$("#"+imagemap[i][0]).hover(hoverer(i));
}