我个人要做的第一件事是data-*
为您的每个选择添加一个属性,其中包含另一个选择的 ID。这使您可以使您的代码更通用,而不必使用切换的 ID 来复制它:
<select id="select-one" data-select="select-two">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select id="select-two" data-select="select-one">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
然后是jQuery代码:
$('#select-one,#select-two').chosen().change(function(e) {
var that = this;
var $otherSelect = $('#' + $(this).data('select'));
$otherSelect.find('option').show().filter(function() {
return this.value == that.value;
}).hide();
});
这change
为两个选择添加了一个事件处理程序。它所做的第一件事是将this
(<select>
已更改的)的副本存储到另一个变量中,因此它可以在传递给的函数中引用它.filter()
。
然后它使用元素的属性获取对另一个<select>
元素的引用。data-select
现在它选择其中的所有选项元素,并显示它们,然后将该列表过滤到仅具有匹配值的那个,并将其隐藏。
更新:
如果您在<select>
元素上单独调用所选插件,您可能希望将匿名函数移动到命名函数,如下所示:
function handleChange() {
var that = this;
var $otherSelect = $('#' + $(this).data('select'));
$otherSelect.find('option').show().filter(function() {
return this.value == that.value;
}).hide();
}
change
然后在单独分配事件处理程序时传递对该函数的引用:
$('#select-one').chosen().change(handleChange);
$('#select-two').chosen().change(handleChange);