选择2自动触发事件更改

Dan*_*ano 8 javascript jquery events jquery-select2

我有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);
});
Run Code Online (Sandbox Code Playgroud)

这是一个非常漂亮但它不适合我Clear select2而不触发更改事件

他建议用类似的东西

$docInput.select2('data', null, false);
Run Code Online (Sandbox Code Playgroud)

我只需要设置新选择的选项而不触发更改事件.使用select2插件时,.select2("val","x")的替代方法是什么?

Chr*_*s C 19

select2 4.0需要在更改值时调用基础元素的标准.val()属性.有关详细信息,请参阅https://select2.github.io/announcements-4.0.html上的select 4.0公告的底部.

要选择您应该使用的值:

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

//Select value and trigger change event
$(destino).val("x").trigger("change")
Run Code Online (Sandbox Code Playgroud)

请注意,由于附加选项的方式,您必须首先重新初始化select2以确保选择该值.即

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

请参阅以下小提琴,了解工作示例https://jsfiddle.net/wfkxdjr6/.


Mob*_*sen 7

而不是trigger('change')每次都必须这样做。

设定值:

$('#select').val(value);
Run Code Online (Sandbox Code Playgroud)

最后再次初始化select2:

$('#select').select2();
Run Code Online (Sandbox Code Playgroud)