плагин jQuery не работает при вызове дважды

Я знаю, что это проблема с тем, как я закодировался плагин для работы с несколькими экземплярами. Я уверен, что по крайней мере одна из моих переменных перезаписывается каждым последующим вызовом плагина. Во всяком случае, вот код плагина:

$.fn.extend({
dependsOn: function( $claimer ){
    $dependent = $(this);
    $claimer.change(function(){
        alert( $dependent.attr('id') );
        var $selected = $('option:selected', this);
        var pk = $selected.attr('class');

        $dependent.removeAttr('disabled');
        $dependent.find('option').each(function(){
            $hiddenOpts = $dependent.parent().find('.hiddenOptions');
            $hiddenOpts.append( $(this) );
            $hiddenOpts.find('option').each(function(){
                if( $(this).attr('ref') == pk || $(this).hasClass('empty') )
                    $dependent.append( $(this) );
            });
        });
    });
}
});

когда я называю $('.something').dependsOn( $('.somethingElse') );, он отлично работает, но если я вызову его снова на двух других элементах, переменная $dependent получает значение этого элемента.

смысл плагина-сохранить выберите коробки отключены предыдущие поле выбора изменяется. Если у меня есть три поля выбора подряд, и я хочу, чтобы первый был включен, второй зависел от первого, а третий зависел от второго, я бы позвонил $(second).dependsOn( $(first) ) и $(third).dependsOn( $(second) ), поэтому изменение первого позволило бы включить второй, но не третий, а изменение второго позволило бы включить третий.

но с текущим кодом изменение первого включает третий, но не второй (как я уже сказал, Я думаю, что это потому, что $dependent перезаписывается и установите на третье после вызова dependsOn дважды).

если это не ясно, дайте мне знать.

2 ответов


это потому, что вы не определяете новую переменную в области dependsOf (которая делается с помощью var $dependent = blah). Вместо этого вы устанавливаете значение $(this) в глобальную версию $dependent.

вот почему его заменяют.

удачи :)


то, как вы заявляете $dependant Это глобальные переменная, поэтому при следующем вызове функции она устанавливает тот же глобальный $dependant новое значение. Попробуйте:

var $dependant = $(this);