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