jQuery Chained: как отключить выпадающий список из цепочки?

Я использовал этот плагин: https://github.com/tuupola/jquery_chained

Я связал раскрывающийся список, и в каком-то случае я хочу отключить цепочку и повторно связать цепочку на основе события.

Вот пример:

<select id="first">
<option value="a">A</option>
<option value="b">B</option>
</select>

<select id="second">
<option value="c" class="a">C</option>
<option value="d" class="a">D</option>
<option value="e" class="b">E</option>
</select>

<input type="checkbox" value="1" id="unchain" />

Javascript будет:

$('#second').chained('#first');
$('#unchain').change(function(){
  if ($(this).prop('checked'))
  {
    // how to unchain the chained dropdown?
  }
});

Пробовали $('#second').unbind('chained');, но ничего не вышло.

Любое предложение?


person Muhammad Zamroni    schedule 18.09.2014    source источник
comment
Попробуйте позвонить $('#first').unbind('change');. Хотя это отвяжет все события изменения из этого раскрывающегося списка.   -  person Ilya Luzyanin    schedule 18.09.2014
comment
о да. он пробовал с $('#second').unbind('change');, и если хотите вернуть цепочку, просто $('#second').bind('change');   -  person Muhammad Zamroni    schedule 18.09.2014
comment
Прежде всего, вы должны unbind изменить событие с #first select, а не #second. Но это по-прежнему не сработает, потому что плагин chained фильтрует все несовпадающие параметры из #second select, поэтому, когда вы отключаете цепочку (unbind из события изменения), у #second select некоторые параметры будут отключены (т. Е. Потеряны навсегда). Это может работать только в том случае, если после разъединения вы повторно инициализируете #second select с полным набором параметров.   -  person Ilya Luzyanin    schedule 18.09.2014
comment
Я создал простой jsfiddle с возможным решением. Это сработает для вас?   -  person Ilya Luzyanin    schedule 18.09.2014


Ответы (1)


Плагин с цепочкой фильтрует все несовпадающие параметры из #second select, поэтому, когда вы «отсоединяете» (отвязываете от события изменения), у #second select некоторые параметры будут отключены (т. Е. Потеряны навсегда).

Это может работать только в том случае, если после разъединения вы повторно инициализируете #second select с полным набором параметров. Так что нужно сделать что-то вроде этого:

$(function () {
    // remember #second select
    var secondCopy = $('#second').clone();
    $('#second').chained('#first');
    $('#unchain').change(function(){
        if ($(this).prop('checked')){
            $('#second').chained('#first');
        }
        else{
            $('#first').unbind('change');
            // remember selected value:
            var value = $('#second').val();
            // populate #second select with remembered options
            $('#second').html(secondCopy.html());
            // set saved value
            $('#second').val(value);
        }
    });
});

Демо.

person Ilya Luzyanin    schedule 18.09.2014
comment
ах, ты был прав. unbind #second удалит параметры в #second. ваше решение сработало для меня. Благодарность! - person Muhammad Zamroni; 18.09.2014