首先,我有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。此致
答案 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/
希望有所帮助!