页面上有5个选择控件,每个控件都有相同的选项值,当我在第一个下拉列表中选择一个值时,我不应该再允许在其他值中再次选择相同的值。我尝试过类似下面的内容。
$("#div").find(".selectClass").live("change", function (e) {
var selectedValue = $(this).val();
var controlId = $(this).attr("id");
var isPropertyAlreadySelected = false;
$("#div").find(".selectClass").each(function () {
var currentSelect = $(this);
if (controlId != currentSelect.attr("id") && currentSelect.val() == selectedValue) {
isPropertyAlreadySelected = true;
}
});
e.preventDefault();
return false;
});
编辑:删除了对“isPropertyAlreadySelected”标志的检查;但我仍然可以选择其他下拉值。
即使我执行“return false”或“e.preventDefault()”,仍会在其他下拉菜单中选择该值。请指出我正确的方向。在此先感谢!!
答案 0 :(得分:1)
答案 1 :(得分:1)
您正在运行的问题是,当您的更改事件触发时,select的值已经更改。
您需要拥有当前所选值的列表,并在此处重置更改的选项:
if (isPropertyAlreadySelected) {
// Reset here
}
只需使用页面加载时选择的值填充数组,并在每次选择选项时更新此数组。
我刚刚测试了mousedown事件。这个选项在选项真正被选中之前触发。试试这里:http://jsfiddle.net/g3rsF/1/
这并不能解决所有情况,因为用户也可以通过按键选择。
答案 2 :(得分:0)
将当前所选项目保存在下拉列表中并使用此小助手:)
<select id="s1" class="selectClass">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<select id="s2" class="selectClass">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
$(document).on("change", ".selectClass", function(ev) {
var cur = $(this),
text = cur.find("option:selected").text(),
isAlreadySelected;
isAlreadySelected = $(".selectClass").not("#" + this.id).filter(function() {
return $(this).find("option:selected").text() === text;
});
if (isAlreadySelected.length) {
cur.prop("selectedIndex", cur.prop("selIdx") || 0);
}
cur.data("selIdx", cur.prop("selectedIndex"));
});