Вернитесь к старому значению итератора в функции click () для javascript / jQuery (вопрос о закрытии) - PullRequest
4 голосов
/ 14 октября 2010

Я пытаюсь заставить функцию "click ()" отображать значение 'i' во время передачи функции Но его возвращение к значению 'i' после его завершения. Я рисую пробел о том, как заставить функцию ссылаться на значение 'i', когда я впервые передал функцию.

for( var i=0; i<10; i++){
 var ts = $('#<span></span>').clone().click(function(){
  alert(i);
 });
}

Примечание:

'#' не должно быть там, равно как и '.clone()'

Ответы [ 2 ]

4 голосов
/ 14 октября 2010

Примерно так будет работать:

for(var i=0; i<10; i++){
  (function(j) {
    var ts = $('<span></span>').click(function(){
        alert(j);
    });
  })(i);
}

Вы можете попробовать здесь . Хотя, ваше создание немного не в порядке, я не уверен, почему вы захотите создать новый элемент просто для его клонирования, и там есть лишние # .... Я удалил оба из них выше, но это не влияет на решение внутренней функции.

2 голосов
/ 14 октября 2010

Вам нужно переместить тело цикла в отдельную функцию, которая принимает i в качестве параметра.

Вы можете использовать обычную функцию, например:

for(var i=0; i<10; i++) {
    makeCopy(i);
}

function makeCopy(i) { 
    var ts = $('#<span></span>').clone().click(function(){
        alert(i);
    });
}

Вы также можете использовать встроенный метод, например так: (остерегайтесь запутанного синтаксиса)

for(var i=0; i<10; i++) {
    (function(i) { //Note i parameter
        var ts = $('#<span></span>').clone().click(function(){
            alert(i);
        });
        ...
    })(i);         //Note i parameter
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...