Jquery - 将数据传递给内联函数

时间:2011-11-06 21:25:07

标签: javascript jquery html function parameters

这可能很简单,答案可能很明显,但我在这里画一个空白。

我有一个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.
    });
}

4 个答案:

答案 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));
}