问问题
3282 次
4 回答
8
如果我理解正确的话,可能是这样的:
var $selects = $('select');
$selects.on('change', function() {
var $select = $(this),
$options = $selects.not($select).find('option'),
selectedText = $select.children('option:selected').text();
var $optionsToDisable = $options.filter(function() {
return $(this).text() == selectedText;
});
$optionsToDisable.prop('disabled', true);
});
//to apply initial selection
$selects.eq(0).trigger('change');
jsFiddle:示例
于 2013-07-22T17:59:51.313 回答
3
扩展@IgorDymov的答案(应该归功于他),这可能是我要做的(见小提琴):
var $selects = $('select');
$selects.on('change', function() {
$("option", $selects).prop("disabled", false);
$selects.each(function() {
var $select = $(this),
$options = $selects.not($select).find('option'),
selectedText = $select.children('option:selected').text();
$options.each(function() {
if($(this).text() == selectedText) $(this).prop("disabled", true);
});
});
});
$selects.eq(0).trigger('change');
这样,每次创建新选择时我们都会完全刷新选择,这意味着属性会再次重新启用。你会注意到在小提琴中我减少了选择的数量并增加了选项的数量,这样你就不会陷入所有选项同时被禁用的情况,我认为这是最有意义的。
于 2013-07-22T18:26:56.773 回答
2
长度示例
var $selects = $('select');
available = {};
// Get the text of options from the dropdown
// and store in a object hash
$('option', $selects.eq(0)).each(function (i) {
var val = $.trim($(this).text());
available[val] = false;
});
$selects.change(function () {
var $this = $(this);
var selectedVal = $.trim($this.find('option:selected').text());
// set that value to true
available[selectedVal] = true;
$selects.not(this).each(function () {
$('option', this).each(function () {
var optText = $.trim($(this).text()),
optCheck = available[optText];
$(this).prop('disabled', optCheck );
});
});
}).change(); // Trigger once to add options at load of first choice
于 2013-07-22T18:22:50.540 回答
-1
要在当前选定选项的选项标签之间获取文本,您可以执行以下操作:
$('option[value="'+$('select').val()+'"]').text();
它转换为:获取选项的文本,其值与选择中当前列出的值相同
于 2013-07-22T17:56:54.570 回答