Jquery 将值从一个选择传递到另一个选择

Jquery 将值从一个选择传递到另一个选择,jquery,Jquery,首先,我有3个单选按钮,如: <input type="radio" name="editList" id="prov" value="P">Prov <input type="radio" name="editList" id="user" value="U">Usu <input type="radio" name="editList" id="suc" value="S">Suc 但现在我想选择lst1的一个值,并自动将其传递给LST2 Disable

首先,我有3个单选按钮,如:

<input type="radio" name="editList" id="prov" value="P">Prov
<input type="radio" name="editList" id="user" value="U">Usu
<input type="radio" name="editList" id="suc" value="S">Suc
但现在我想选择lst1的一个值,并自动将其传递给LST2 Disable select,我尝试这样做:

$('#lst1').change(function() {
  if ($('input:radio[name="editList"]').val() === responsable.SUCURSAL) {
  $('#lst2').val($(this).val());
  }
});

但它不起作用,我正在尝试做的事情有很多。考虑到@Simon在评论中提到的

,首先您需要找到正确的选中单选按钮:

$('input:radio[name="editList"]:checked').val();
之后,它会立即清除您选择的值,因为每次lst1的值更改时,您都会重新填充lst2的选项。我通过在getlst2周围添加一个if来修复它,但不确定这是否最适合您:

function getlst2(sender) {

  // sender: jQuery Object which called this method.
  if ($("#lst2").find('option').length == 0) {
    sender.addClass("changed");
    $("#lst2").getJSONCatalog({
      url: 'https://demo9451608.mockable.io/getTest',
      valueProperty: "id",
      textProperty: "value"
    });
  }
}
它也只能从第二次更改开始工作,因为在第一次触发更改事件时,lst2中还没有任何选项。您可以通过让jQuery函数返回一个承诺来解决这个问题。像这样:

立即创建一个延迟的:

var dfd = jQuery.Deferred();
在结尾处返回承诺:

return dfd.promise();
在填充选项后解决承诺:

var successfulResponse = function(data) {
    appendOptions(data);
    dfd.resolve("done");
    settings.onSuccess(data);
};
然后,您可以要求它在完成后运行另一个函数:

$("#lst2").getJSONCatalog({
  url: 'https://demo9451608.mockable.io/getTest',
  valueProperty: "id",
  textProperty: "value"
}).then(
  function() {
    $("#lst1").change()
  }
);
更新小提琴:

如果你有任何问题,请告诉我!祝你好运

======================================

根据您的评论更新:

这是因为您现在正在为selectbox使用小部件。添加选项后,需要刷新小部件上的选项。您可以通过销毁小部件并重新初始化它来实现这一点

$("#lst1").select2("destroy");
$("#lst1").select2();
您应该继续使用我给您的承诺代码,因为它在这种情况下也很方便:

$("#lst1").getJSONCatalog({
  url: 'https://demo9451608.mockable.io/getTest',
  valueProperty: "key",
  textProperty: "value",
  onChange: getlst2
}).then(
  function() {
    $("#lst1").select2("destroy");
    $("#lst1").select2();
  }
);
现在我们可以告诉小部件在选项更改后更新

您还需要更新代码以更新值,以便正确使用小部件:

$('#lst2').select2("val", $(this).val());
更新小提琴:


希望有帮助

调试时,在lst1更改中放置一个断点,并检查$'input:radio[name=editList]'.val的值。我认为您需要使用$'input:radio[name=editList]:checked'。valIt工作得很好,但现在我想使用select 2实现它,但它不起作用,select 2在我们尝试重新填充select时阻止某些内容?有选择2它不工作,但如果我不添加它,它works@Gerardo在答案底部为您添加了一个更新。如果所有这些都对您有所帮助,请记住选择它作为答案!=]回答得好+1注。。我不知道如果我们使用$'lst2',select2val,$this.val;因此,我们可以更改触发选项,如:$'lst1'.val$this.val.triggerchange;
$("#lst1").getJSONCatalog({
  url: 'https://demo9451608.mockable.io/getTest',
  valueProperty: "key",
  textProperty: "value",
  onChange: getlst2
}).then(
  function() {
    $("#lst1").select2("destroy");
    $("#lst1").select2();
  }
);
$('#lst2').select2("val", $(this).val());