2014-01-14 3 views
1

У меня возникла проблема, которая сводит меня с ума. Я повторяю набор элементов. Предположим, что у набора есть размер N. На каждой итерации я пишу node.onclick = function() { handleClick(idx); };, где node - это элемент, а idx - глобальная переменная, которую я увеличиваю на каждой итерации. Моя цель - прослушивать N элементов таким образом, что при нажатии элемента i (i принадлежит [0, N-1]), что handleClick (idx) вызывается с аргументом idx = i. Однако отладка показывает, что независимо от того, какой из элементов был нажат, в handleClick (idx) idx всегда будет равен N-1 (последнее значение). Я также пробовал то же самое с idx как локальную переменную. Я попытался создать глобальный узел массива [], который нажимает новый элемент на каждой итерации ...Javascript onclick прослушиватель

Как установить слушателя «onclick» на N различных элементов, таких как функция обработчика, такая же, но аргумент этой функции различен? Как это сделать? Спасибо!

+0

Конечно, это показывает последний номер, вы используете * IDX является глобальной переменной *. Просто немного времени отладки, и вы могли бы это сделать по вашему;) – DontVoteMeDown

ответ

1

Проблема описывается DontVoteMeDown, решение заключается в создании anoymous функции вроде этого:

node.onclick = (function(idx) { 
    return function() { handleClick(idx); }; 
})(idx); 

Что это делает непосредственно вызывать anoymous функцию так, идентификатор копируется в новую переменную, которая remeains внутри анонимная функция.

+0

Это решение сработало для меня! Thaaaank вас! – user2957378

1

Попробуйте

for(var i = 0; i<set.length; i++){ 
    set[i].onclick = function(){ 
     handleClick(i); 
    } 
} 
Смежные вопросы