плагин 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);