Как передать параметр «константа» в JQuery - PullRequest
1 голос
/ 02 сентября 2011

У меня есть следующий элемент, прикрепленный к элементу div, который определяет, когда пользователь щелкает правой кнопкой мыши по элементу div и вызывает функцию theFunction.

$('#box_'+i).bind('mousedown',function(e){if(e.which==3)theFunction(e,i)});

Код запускается внутри цикла (где увеличивается переменная i), поскольку на странице есть несколько элементов div, для которых требуется щелчок правой кнопкой мыши. Однако, когда вызывается theFunction, он всегда передает последнее значение i вместо значения, которое было, когда было выполнено bind (). Есть ли способ сделать его постоянным, чтобы он не изменился i для предыдущих div'ов при запуске цикла?

Ответы [ 3 ]

5 голосов
/ 02 сентября 2011

Вам нужно будет зафиксировать значение i в локальной области внутри цикла:

// Start your loop
(function(i){
    $('#box_'+i).bind('mousedown', function(e){
        if (e.which==3) theFunction(e,i)
    });
})(i);
// end your loop
1 голос
/ 02 сентября 2011

Все решения укупорки хороши (они работают просто отлично), но я подумал, что укажу другой способ сделать это.Вы также можете получить доступ к объекту, который вызвал событие, и извлечь номер из идентификатора объекта.Это будет работать примерно так:

$('#box_'+i).bind('mousedown',function(e){
    var matches = this.id.match(/_(\d+)$/);
    var num = parseInt(matches[1], 10);
    if(e.which == 3) theFunction(e, num);
});

Или, если вы действительно хотите быть объектно-ориентированным (и использовать удобную возможность jQuery), вы можете сохранить значение индекса как отдельный элемент данных, связанный с объектом.и получите его оттуда позже.

$('#box_'+i).data("index", i).bind('mousedown',function(e){
    if(e.which == 3) theFunction(e, $(this).data("index"));
});

Рабочая демонстрация второго метода здесь: http://jsfiddle.net/jfriend00/wVDHw/

0 голосов
/ 02 сентября 2011
for(var i=0;i<100;i++)
    (function(i){
        $('#box_'+i).bind('mousedown',function(e){
            if(e.which==3)
                theFunction(e,i);
         });
    })(i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...