Плагин jQuery не работает при двойном вызове - PullRequest
6 голосов
/ 26 января 2012

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

$.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') );, он работает нормально, но если я вызову его снова для двух других элементов, переменная $ зависимая будет установлена ​​в элемент THAT.

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

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

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

Ответы [ 2 ]

5 голосов
/ 26 января 2012

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

Именно поэтому его заменяют.

Удачи:)

1 голос
/ 26 января 2012

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

var $dependant = $(this);

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