我正在使用以下函数,它在chrome中完美运行,如果没有重复项则返回true,如果有重复项则返回false并显示#error
div。
如果我在IE11中运行它,它会将它们全部标记为重复并显示#error
div,即使没有任何重复...
// Check for duplicates
function checkSelect() {
var valid = true;
var atLeastAValue = false;
$("select").css("background-color", "white");
$.each($("select"), function (index, value) {
var others = $("select");
if ($(value.selectedOptions).val() !== "") {
$.each(others, function (otherIndex, otherValue) {
if ($(otherValue.selectedOptions).val() !== "") {
if (index === otherIndex && $(value.selectedOptions).val() === $(otherValue.selectedOptions).val()) {
atLeastAValue = true;
} else if ($(value.selectedOptions).val() === $(otherValue.selectedOptions).val()) {
$(value).css("background-color", "#ff9696");
$(otherValue).css("background-color", "#ff9696");
valid = false;
}
}
});
} else if (!atLeastAValue) {
$(value).css("background-color", "#ff9696");
valid = false;
}
});
if (!valid) {
var $div2 = $("#error");
if ($div2.is(":visible")) { return; }
$div2.show("slow");
setTimeout(function() {
$div2.hide("slow");
}, 10000);
}
return valid;
};
是什么让它与IE11不兼容?如何使其兼容......
答案 0 :(得分:3)
IE中尚未实现selectionOptions。由于您将所选选项传递给jQuery,因此您可以使用:selected selector。
因此$(value.selectedOptions)
变为$(value).find('option:selected')
或$(value).val()
或仅value.value
(如果选择是单个选择)
function checkSelect() {
var valid = true;
var atLeastAValue = false;
$("select").css("background-color", "white");
$.each($("select"), function (index, value) {
var others = $("select");
if ($(value).find('option:selected').val() !== "") {
$.each(others, function (otherIndex, otherValue) {
if ($(otherValue).find('option:selected').val() !== "") {
if (index === otherIndex && $(value).find('option:selected').val() === $(otherValue).find('option:selected').val()) {
atLeastAValue = true;
} else if ($(value).find('option:selected').val() === $(otherValue).find('option:selected').val()) {
$(value).css("background-color", "#ff9696");
$(otherValue).css("background-color", "#ff9696");
valid = false;
}
}
});
} else if (!atLeastAValue) {
$(value).css("background-color", "#ff9696");
valid = false;
}
});
if (!valid) {
var $div2 = $("#error");
if ($div2.is(":visible")) {
return;
}
$div2.show("slow");
setTimeout(function () {
$div2.hide("slow");
}, 10000);
}
return valid;
};
你也可以只使用$(value).val()
来获取一个select元素的值,如果它是单选,它只返回值,select是多选,那么它将返回一个选定值的数组
更简化的方法可以是
function checkSelect() {
var $selects = $("select").removeClass('duplicate');
$selects.each(function(){
var value = this.value;
$selects.not(this).has('option[value="'+this.value+'"]:selected').addClass('duplicate');
})
var valid = !$selects.hasClass('duplicate');
if (!valid) {
var $div2 = $("#error").stop(true, true);
if ($div2.is(":hidden")) {
$div2.show("slow");
setTimeout(function () {
$div2.hide("slow");
}, 10000);
}
}
return valid;
};
演示:Fiddle