Добавьте динамическую функцию к элементу, используя jQuery - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь прикрепить динамическую функцию .change() к списку элементов:

els = new Array('#element1','#element2');

for (i=1; i < 3; i++){
    $(els[i]).change(function(){
        alert(i);
    });
}

Это не работает должным образом, потому что i не передается в функцию, а вместо этоговсегда равен последней итерации, т. е. 2. Как передать значение в change(function{})?

Ответы [ 4 ]

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

jQuery события могут принимать eventData в подписи и передавать его в качестве аргументов вашей функции обратного вызова.Из документов jQuery:

.change( [eventData], handler(eventObject) )

То, что вы хотите, это (я изменил имя arg, чтобы сделать его очевидным):

for (i=1; i < 3; i++){
    $(els[i]).change({index: i}, function(event){
        alert(event.data.index);
    });
}
2 голосов
/ 02 сентября 2011

Все ваши сгенерированные функции ссылаются на одну и ту же переменную: i.Впоследствии эта переменная изменяется при продолжении цикла, поэтому к моменту возникновения события изменения i будет установлено на 2.

. Необходимо создать локальную область, в которой будет храниться значение * 1006.* в данный момент ваша функция создается:

els = new Array('#element1','#element2');

for (i=1; i < 3; i++){
    (function(i){
        $(els[i]).change(function(){
            alert(i);
        });
    })(i);
}
1 голос
/ 02 сентября 2011

Два способа сделать это.

Использование $.each

var element_array = new Array('#element1','#element2');

$.each( element_array, function( index, value ){ 
    $(value).change(function(){ 
        alert( index ); 
    }); 
});

Создание замыкания.

var element_array = new Array('#element1','#element2');

for ( i = 0; i < element_array.length; i++){
    (function(i){
        $(element_array[i]).change(function(){
            alert(i);
        });
    })(i);
}
0 голосов
/ 02 сентября 2011

Вы пробовали что-то подобное:

els = new Array ('# element1', '# element2');

for (i=1; i < 3; i++){ $(els[i]).bind( 'change', function(){ alert(i); });}

Когда вы загружаете страницу, jQuery не знает значений массива и похож на строку.

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