2015-07-29 7 views
3

У меня есть 4 окна выбора, когда я меняю первый, делаю что-то вроде пустого, добавляю и устанавливаю новое значение для следующего.Select2 auto trigger event change

Потому что я использую select2, просто могу установить его с помощью $ .select2 ('val', 'value');

Только эта команда запускает событие изменения на другом выборе и делает каскад изменений.

Обратите внимание, что .empty() и append() не будут запускаться (и мне это нравится), даже .val() не должен запускать его, но когда вы используете select2, вы не можете получить доступ к новому val с помощью этого.

код здесь:

function anidado(selectorOrigen,selectorDestino) { 
    id = selectorOrigen; 
    alert(id); 
    destino = "#"+selectorDestino; 
    valor = $('#'+id).find(":selected").val(); 
    $.ajax({ 
    method: "GET", 
    url: "blanco2.php", 
    data: { select: id, valor: valor } 
    }) 
    .done(function(msg) { 
     obj = $.parseJSON(msg); 
     if (obj.length>0) { 
     $(destino).empty().append('<option value="x">Select an ---</option>').select2("val", "x"); 
     $.each(obj,function(index) { 
      valor = obj[index].codigo; 
      texto = obj[index].descripcion; 
      $(destino).append('<option value=' + valor + '>' + texto + '</option>'); 
      $(destino).prop("readonly",false); 

     }); 
     } else { 
     $(destino).empty().append('<option value=""></option>').select2("val", ""); 
     } 

    }); 
    return false; 
} 

$("select").change(function() { 
    selectorOrigen = this.id; 
    if (selectorOrigen === 'pais') { 
    selectorDestino = 'ua'; 
    } else if (selectorOrigen === 'ua') { 
    selectorDestino = 'unidad'; 
    } else if (selectorOrigen === 'unidad') { 
    selectorDestino = 'rol'; 
    } else if (selectorOrigen === 'rol') { 
    selectorDestino = 'categoria'; 
    } else { return false; } 
    anidado(selectorOrigen,selectorDestino); 
}); 

Это было довольно один, но он не работает для меня Clear select2 without triggering change event

Он предлагает использовать что-то вроде

$docInput.select2('data', null, false); 

Я просто нужно установить новую выбранные опция без запуска события изменения. Любая альтернатива .select2 ("val", "x") при использовании модуля select2?

ответ

13

select2 4.0 требует стандартного .val() атрибута базового элемента, который вызывается при изменении значения. Подробные сведения об этом можно увидеть в нижней части объявления 4.0 для выбора на https://select2.github.io/announcements-4.0.html.

Чтобы выбрать значение, которое вы должны использовать:

//Select value without triggering change event 
$(destino).val('x'); 

//Select value and trigger change event 
$(destino).val("x").trigger("change") 

Пожалуйста, обратите внимание, что из-за способа варианты, добавленными вы должны повторно инициализировать ВЫБ.2 сначала убедитесь, что выбрана величина. т.е.

//Re-initialize and set value without triggering change event 
$(destino).select2(); 
$(destino).val('x'); 

Пожалуйста, смотрите ниже скрипку для рабочего примера https://jsfiddle.net/wfkxdjr6/.