我的HTML页面中有5个选择框,我试图禁用已选中的其他选择框中的所有选项,取消选择后也必须重新启用它们。
到目前为止,我得出了这个结果:Click here for JSFiddle
使用此JQuery
$('.poli').on('keyup change', function () {
$(this)
.siblings('select')
.children('option[value=' + this.value + ']')
.attr('disabled', true)
.siblings().removeAttr('disabled');
});
然而,这并没有太好用,它当时只选择和禁用1个选项......
任何解决方案?
答案 0 :(得分:5)
您可以使用:
$('.poli').on('keyup change', function () {
var selectedValues = $('.poli').find('option:selected').map(function () {
return this.value ? this.value : null;
});
$('.poli').filter(function () {
return !this.value
}).find('option').each(function () {
$(this).prop('disabled', ~$.inArray(this.value, selectedValues));
});
});
答案 1 :(得分:4)
我已更新fiddle。您需要跟踪所选选项并禁用其他选择框中的选项:
$('.poli').on('keyup change', function () {
var selected = [];
$(".poli option:selected").each(function () {
if ($(this).val() !== "")
selected.push($(this).val());
});
$(".poli:not(this) option").each(function () {
if (selected.indexOf($(this).val()) > -1)
$(this).prop("disabled", true);
else
$(this).prop("disabled", false);
});
});
答案 2 :(得分:1)
这可以清除禁用;我正在研究启用代码将在一分钟内发布:
$('select').change( function () {
$('select').each(function() {
$(this).siblings('select').children('option[value=' + this.value + ']').attr('disabled', true);
});
});