Назначить обработчик кликов для цикла в Javascript - PullRequest
2 голосов
/ 16 января 2012

Может кто-нибудь сказать мне, почему это работает:

$("#test1 td").click(function(event) {
  $("#test1").addClass("tableRowSelected");
});
$("#test2 td").click(function(event) {
  $("#test2").addClass("tableRowSelected");
});

Но это не так:

for(var i = 1; i < 3; i++) {
  $("#test" + i + " td").click(function(event) {
    $("#test" + i).addClass("tableRowSelected");
  });
}

Я также пытался использовать i.toString() во втором фрагменте кода, ноэто не поможет: (

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Функция обработчика событий получает постоянную ссылку на переменную i, а не ее копию на момент ее создания. Подробнее см. этот другой ответ .

2 голосов
/ 16 января 2012

Как насчет использования:

$("table").on("click", "td", function() {
    $(this).parent().addClass("tableRowSelected");
});

При этом будет использоваться делегирование событий, чтобы прикрепить событие к таблице и отфильтровать события щелчка по td

0 голосов
/ 16 января 2012

UPDATE

Чтобы заставить его работать, измените $("#test" + i).addClass("tableRowSelected"); на $(this).parents('tr').addClass("tableRowSelected");

Как указал Пойнти, на самом деле я существую со значением 4, которое недопустимо.


Это потому, что во втором случае, когда событие действительно запускается, i больше не существует.

...