Jquery - передает данные встроенным функциям - PullRequest
3 голосов
/ 07 ноября 2011

Это, вероятно, действительно просто, и ответ, вероятно, действительно очевиден, но я рисую здесь пробел.

У меня есть массив элементов 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 ]

2 голосов
/ 07 ноября 2011

Использование закрытия в качестве оболочки для сохранения состояния.

for (i = 0; i < statecount; i+=1)
{
  (function(i){
    $('#'+imagemap[i][0]).hover(function () {
      alert(i);
    });
  }(i));
}
1 голос
/ 07 ноября 2011

Если вы используете> = 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));
}

Обратите внимание, что это выдвигает событие в конец списка аргументов.

1 голос
/ 07 ноября 2011

Хотя это не отвечает на ваш вопрос, вы можете получить указатель на объект, который был наведен, используя this внутри функции:

for (i=0; i<statecount; i++) {
    $("#"+imagemap[i][0]).hover(function() {
        alert(this);
    }
}

Возможно, вы захотите использовать $(this), есливам нужен объект JQuery.

0 голосов
/ 07 ноября 2011

Будьте осторожны, потому что это легко испортить:

var hoverer = function(i) {
  return function() {
         alert(i); 
  };
};

for (i=0; i<statecount; i++) {
        $("#"+imagemap[i][0]).hover(hoverer(i));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...