我有几个选择框(确切的数字是动态的),每个都包含相同的值。当在一个框中选择一个选项时,我想disable
在所有其他选择框中使用此值。
如此jsFiddle所示,当您在第一个选择框中选择一个值时,它会正确禁用第二个选择框中的该值。当您在第二个选择框中选择一个值时,代码会正确禁用第一个选择框中的该值;但是,它在第二个框中启用(即不禁用)第一个选择框中的原始选定值。
复制:选择Value One
第一个选择框。Value One
在第二个选择框中正确禁用。现在Value Two
在第二个选择框中选择。它在第一个选择框中被禁用,但现在Value One
在第二个选择框中被错误地启用。
经过数小时尝试诊断问题后,我的语句似乎.each
只处理第一个选择框,并没有前进到第二个选择框来迭代它的值。编辑:实际上它并没有停止处理;如果从 jsFiddle 中删除第 22-24 行(启用不再选择的值的 else 语句),Value One
然后Value Three
在第一个选择框中选择,则代码正确处理第二个选择框并禁用Value One
and Value Three
。所以多次迭代结束有问题selectedAreas
吗?
如何使用我的area_select
班级遍历页面上所有选择框中的所有选项?
我的 jQuery:
$(function() {
$(document).on('change', '.area_select', function (e) {
generateSelectedAreas();
});
});
function generateSelectedAreas()
{
var selectedAreas = new Array();
//Get all the currently selected areas
$('.area_select option:selected').each(function () {
if ($(this).val() != '') {
selectedAreas.push($(this).val());
}
});
//The selectedAreas array contains all the correct values, as shown here
console.log(selectedAreas);
$('.area_select>option:not(:selected)').each(function () {
for(var counter=0; counter < selectedAreas.length; counter++) {
if (selectedAreas[counter] == $(this).val()) {
$(this).attr("disabled", true);
}
else {
$(this).attr("disabled", false);
}
}
});
return selectedAreas;
}