Я знаю, что это проблема из-за того, как я закодировал плагин для работы с несколькими экземплярами. Я почти уверен, что по крайней мере одна из моих переменных перезаписывается при каждом последующем вызове плагина. В любом случае, вот код плагина:
$.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 element.
Смысл плагина состоит в том, чтобы держать поля выбора отключенными до тех пор, пока предыдущее поле выбора не будет изменено. Если у меня есть три поля выбора подряд, и я хочу, чтобы первое было включено, второе зависит от первого, а третье зависит от второго, я бы позвонил $ (second) .dependsOn ($ ( first))
и $ (third) .dependsOn ($ (second))
, поэтому изменение первого включит второе, но не третье, а изменение второго затем включит третий .
Но с текущим кодом изменение первого позволяет использовать третий, но не второй (как я уже сказал, я думаю, это потому, что $ зависимый перезаписывается и устанавливается на третье значение после двойного вызова зависимости).
Если это не ясно, дайте мне знать.