如果在其他选择中选择了精确选项,如何禁用select中的多个选项。我在这个链接上找到了类似于我的问题的回答问题: http://jsfiddle.net/dZqEu/
接下来是jQuery代码:$(this).siblings('select').children('option').each(function() {
if ( $(this).val() === value ) {
$(this).attr('disabled', true).siblings().removeAttr('disabled');
}
问题是这仅适用于2个选择。我需要总共3个选项,这将禁用选择中相同值的可能性。
此代码不适用于3种选择: http://jsfiddle.net/dZqEu/968/
提前Tnx
注:
当select1设置为1时,select 2设置为2,我无法禁用select3中的值1和2。它仅禁用选择3 ...
中的值2答案 0 :(得分:7)
试试这个: - http://jsfiddle.net/Z2yaG/
使用焦点获取prev值并删除已禁用的值。 在您的html中,我为默认选项添加了值-1。
<option value="-1">No Match</option>
var prev = -1;
$("select").change(function () {
if ($(this).val() > -1) {
$("select").not(this).find("option[value=" + $(this).val() + "]").attr('disabled', 'disabled');
}
$("select").not(this).find("option[value=" + previous + "]").removeAttr('disabled');
}).focus(function () {
previous = $(this).val();
});
答案 1 :(得分:2)
这似乎有效:http://jsfiddle.net/QLn9b/1/
它使用您的原始代码:
$("select").change(function() {
$("select").not(this).find("option[value="+ $(this).val() + "]").attr('disabled', true);
});
答案 2 :(得分:1)
我认为这就是你要找的东西。
$('select').change(function() {
var select_elements = $('select')
$.each(select_elements, function(i,elem){
var sel_values = [];
// Selecting and Iterating on Sibling Selects
var siblis = $(elem).siblings('select')
$.each(siblis, function(i, sibli){
if($(sibli).val()!='No Match'){
sel_values.push($(sibli).val());
}
});
// Iterating on Options of Select
$(this).children('option').each(function() {
$(this).removeAttr('disabled');
if($.inArray($(this).val(), sel_values) !== -1){
$(this).attr('disabled', true);
}
});
});
});
如果所有选择的值均为1到6,则
If select1 value --> 1,
and select2 value --> 3 (1 is disabled)
then in select3 value --> 5 (1,3 are disabled)
选择select3后,
In select1 --> 1 (3,5 disabled)
In select2 --> 3 (1,5 disabled)
In select3 --> 5 (1,3 disabled)
这是jsfiddle:http://jsfiddle.net/prem_nagalla1/rY4n3/
希望有所帮助:)
答案 3 :(得分:1)
这是一种方式。当任何下拉列表更改时,计算所有选定的值(第一个除外)。如果其他框的选定值出现在值列表中,请禁用相应的选项。
$('select').change(function() {
var values = [],
others = $(this).siblings('select'),
all = others.andSelf();
all.each(function() {
if (this.selectedIndex > 0) {
values.push(this.options[this.selectedIndex].value);
}
});
others.each(function() {
for (var i = 0; i < this.options.length; ++i) {
this.options[i].disabled = $.inArray(this.options[i].value, values) !== -1;
}
});
});
答案 4 :(得分:0)
试试这个。
$('select').change(function()
{
var value = $(this).val();
$('option').removeAttr("disabled");
$('select').each(function ()
{
$("option[value=" + $(this).val() + "]").attr("disabled","disabled");
});
});