我已经将2个元素放在一起。他们都使用jQuery Chosen插件。
这是代码:
<div class="wrapper">
<select data-placeholder="Number row 1" style="width:350px;" multiple class="chzn-select">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<select data-placeholder="Number row 2" style="width:350px;" multiple class="chzn-select">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
</div>
这是Javascript。 jQuery库,最新的Chosen插件和CSS都包含在课程中。
<script>
$('.chzn-select').trigger("liszt:updated");
$('.chzn-select').chosen().change( function() {
var selectedValue = $(this).find('option:selected').val();
$(this).parent().find('option[value="'+ selectedValue +'"]:not(:selected)').attr('disabled','disabled');
});
</script>
这是我想用上面的脚本完成的。
有人知道如何做到这一点吗?
修改
我现在在这里提出了一个JSFiddle 正确:http://jsfiddle.net/dq97z/3/。任何帮助将不胜感激!
答案 0 :(得分:24)
这样的事情应该这样做:
http://jsfiddle.net/musicisair/dq97z/10/
// cache selects for use later
var selects = $('.chzn-select');
// whenever the selection changes, either disable or enable the
// option in the other selects
selects.chosen().change(function() {
var selected = [];
// add all selected options to the array in the first loop
selects.find("option").each(function() {
if (this.selected) {
selected[this.value] = this;
}
})
// then either disabled or enable them in the second loop:
.each(function() {
// if the current option is already selected in another select disable it.
// otherwise, enable it.
this.disabled = selected[this.value] && selected[this.value] !== this;
});
// trigger the change in the "chosen" selects
selects.trigger("liszt:updated");
});
答案 1 :(得分:2)
我正在尝试使用此代码而不进行多项选择,因此对于每个选择,只能选择一个选项。 我想使用allow_single_deselect:true代码删除一个选项,如果在选择框中选择但我无法使其工作。我禁用了搜索选项,因为我在此页面上不需要它。
<script>//<![CDATA[
$(function(){
$('.chzn-select').chosen({disable_search_threshold: 10}) .change(
function() {
var selectedValue = $(this).find('option:selected').val();
$(this).parent().parent().find('option[value="'+ selectedValue +'"]:not(:selected)').attr('disabled','disabled');
$('.chzn-select').trigger("liszt:updated");
});
});//]]></script>
答案 2 :(得分:0)
由于您正在修改在第一个下拉列表中选择的选项,因此不会再次启用已禁用的先前选项。
您需要先启用所有选项,然后仅禁用所选选项。试试这个
$('.chzn-select').trigger("liszt:updated");
$('.chzn-select').chosen().change( function() {
var selectedValue = $(this).find('option:selected').val();
var $options = $(this).parent().find('option').attr('disabled', false);
$options.filter('option[value="'+ selectedValue +'"]:not(:selected)')
.attr('disabled', true);
});
答案 3 :(得分:0)
你在每次改变时设置禁用,当然它不起作用......
在此代码中,我根据之前的值更改disabled属性;
<script>
$('.chzn-select').trigger("liszt:updated");
$('.chzn-select').chosen().change( function() {
var selectedValue = $(this).find('option:selected').val();
$(this).parent().find('option[value="'+ selectedValue +'"]:not(:selected)')
.prop("disabled", function( i, val ) {
return !val;
});
});
</script>