Использование значения переменной во время объявления функции, а не во время выполнения? - PullRequest
2 голосов
/ 07 апреля 2011

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

Я запускаю циклв JS / jQuery, который связывает функции с событиями для определенных элементов.Поскольку элементы динамически добавляются на страницу, я хочу, чтобы функция содержала ссылку на конкретный элемент, который она будет изменять.Ниже показан упрощенный пример вместе с кодом обхода, который я использую.

for (row = 0; row < numOfRows; row++) {
    $('#row' + row + ' input').keyup(function () {
        alert($(this).parent().parent().get(0).id);    
    });
}

Проблема здесь в том, что для получения ссылки на строку вместо использования переменной, используемой вЦикл, я должен вытянуть ссылку из идентификатора строки длинным витым способом (в коде выше, есть еще одна строка, которая удаляет «строку» из идентификатора, пропущено для ясности.)

ЧтоЯ хотел бы работать с чем-то похожим на:

for (row = 0; row < numOfRows; row++) {
    $('#row' + row + ' input').keyup(function () {
        alert(row);
    });
}

Однако, это, очевидно, возвращает только идентификатор последнего добавляемого элемента.Я уверен, что есть простой способ просто взять значение переменной, а не ссылку на нее, но я просто еще не сталкивался с этим.Кто-нибудь может помочь?

1 Ответ

8 голосов
/ 07 апреля 2011
for (var row = 0; row < numOfRows; row++) {
    (function(row) {
        $('#row' + row + ' input').keyup(function() {
            alert(row);
        });
    })(row);
}

Это создает новое замыкание, и поскольку строка передается в качестве аргумента функции, она «отсоединяется» от переменной цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...