我有4个下拉框,当我改变第一个下拉框时,会进行一些操作,例如清空、追加和设置新值给下一个下拉框。
因为我使用了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);
});
这是一个不错的建议,但对我并没有起作用 清除Select2但不触发change事件
他建议使用类似以下的方法
$docInput.select2('data', null, false);
我只需要设置新选择的选项,而不触发更改事件。在使用select2插件时,有没有 .select2("val", "x") 的替代方案?