【发布时间】:2015-03-24 01:22:55
【问题描述】:
我有一个这样的 HTML 表单:
所有下拉列表都包含相同的列表:Option 1, Option 2, Option 3,用户需要为每个键选择一个值。这可以按预期工作,不用担心:
但是,我想增强它。 Keys 和 Options List 都可以变得相对较大(比如 20)。预计会有一对一的映射,您不能在两个地方选择一个值。但是当列表很大时,很容易出错,在两个地方选择相同的值。我们会进行一些客户端验证来检查重复项,但我更喜欢通过从其他下拉列表中删除所选选项以使其无法再次选择的用户体验。像这样:
我该怎么办?
最终解决方案
我最初选择了 Knockout 解决方案,但转念一想,我更喜欢 Rick Hitchcock 的纯 JQuery 解决方案,因为我可以轻松地将其插入任何地方而无需任何额外设置。以下是我如何修改 Rick 的解决方案以使其更可重用:
function reducingDropdowns(dropDownSelector){
var $dropdowns = $(dropDownSelector);
$dropdowns.change(function() {
// First enable all options.
$dropdowns.find('option').prop('disabled', false);
// Then for each dropdown, get its current value and
// disable that option in other dropdowns.
$dropdowns.each(function() {
var $currDropdown= $(this);
var currDropdownValue= $currDropdown.val();
if(currDropdownValue !== ''){
var $otherDropdowns = $dropdowns.not($currDropdown);
$otherDropdowns.find('option').each(function() {
var $option = $(this);
var optionIsAlreadySelected = $option.val() === currDropdownValue;
if(optionIsAlreadySelected)
$option.prop('disabled', true);
});
}
});
});
}
现在您可以为所有相关的下拉菜单提供一个通用类,并在需要的任何地方调用类似的内容:
reducingDropdowns('.myDropdownClass');
感谢大家的帮助。
PS:我还意识到,对于我的应用程序,我更喜欢禁用已经使用的选项,而不是完全从列表中删除它们。
【问题讨论】:
标签: javascript jquery html knockout.js