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

时间:2017-06-09 16:02:00

标签: jquery

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

if ... then
  ...
elsif ... then
  ...
end if;

我有两个选择列表,如:

<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

现在,如果点击值为<select id="lst1"></select> <select id="lst2"></select> 的单选按钮,我会停用lst2

"S"

但现在我想选择var responsable = Object.freeze({ PROVEEDOR: "P", USUARIO: "U", SUCURSAL: "S" }); $('input:radio[name="editList"]') .click(function() { if ($(this).val() === responsable.SUCURSAL) { $('#lst2').prop('disabled', true); } else { $('#lst2').prop('disabled', false); } }); 的一个值并自动将其传递给lst1(禁用选择),我尝试这样做:

lst2

但它不起作用,我试图做JsFiddle。此致

1 个答案:

答案 0 :(得分:1)

正如@Simon在评论中首先提到的,你需要正确找到正确的选中单选按钮:

$('input:radio[name="editList"]:checked').val();

之后会立即清除您选择的值,因为每次lst1的值发生变化时,您都会重新填充lst2的选项。我通过在if附近添加getlst2来修复它,但不确定哪种方式最适合您:

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函数返回一个promise来解决这个问题。像这样:

创建一个延迟的immedaitely:

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()
  }
);

更新了小提琴:https://jsfiddle.net/5wufz7yv/12/

如果您有任何疑问,请与我们联系!祝你好运。

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

从您的评论中更新:

这是因为您现在正在为选择框使用窗口小部件。添加后,需要在窗口小部件上刷新选项。您可以通过销毁窗口小部件并重新初始化它来完成此操作。

$("#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());

更新了小提琴:http://jsfiddle.net/4ad7A/696/

希望有所帮助!

相关问题