function Validate() {
for (var i = 0; i < 2; i++) {
var objCat = document.getElementById("ddlCategories" + i);
if (objCat.options[objCat.selectedIndex].text != "--SET--") {
for (var j = i + 1; j < 6; j++) {
var objCatNext = document.getElementById("ddlCategories" + j);
if (objCat.options[objCat.selectedIndex].text == objCatNext.options[objCatNext.selectedIndex].text) {
spnMessage.innerHTML = objCatNext.options[objCatNext.selectedIndex].text + " exists.";
return false;
}
}
}
}
return true;
}
我有上面的Javascript代码在Chrome中正常运行但在IE 11中引发了以下异常。
错误:无法获取未定义或空引用的属性“选项”
我试图首先检查objCat是否为null或未定义,但仍然抛出异常,仅在IE中。
function Validate() {
for (var i = 0; i < 2; i++) {
var objCat = document.getElementById("ddlCategories" + i);
if (objCat) { //check if objCat is not null or undefined but this has solved the issue.
if (objCat.options[objCat.selectedIndex].text != "--SET--") {
for (var j = i + 1; j < 6; j++) {
var objCatNext = document.getElementById("ddlCategories" + j);
if (objCat.options[objCat.selectedIndex].text == objCatNext.options[objCatNext.selectedIndex].text) {
spnMessage.innerHTML = objCatNext.options[objCatNext.selectedIndex].text + " exists.";
return false;
}
}
} }
}
return true;
}
是否有人注意到可能的原因?
以下是您在浏览器中查看网页来源时生成的HTML
<select name="ddlCategories0" onchange="javascript:setTimeout('__doPostBack(\'ddlCategories0\',\'\')', 0)" id="ddlCategories0" class="input Width250" onclick="Clear()">
<option value="0"> --SELECT--</option>
<option selected="selected" value="2">One</option>
<option value="3">Two</option>
</select>
<select name="ddlCategories1" onchange="javascript:setTimeout('__doPostBack(\'ddlCategories1\',\'\')', 0)" id="ddlCategories1" class="input Width250" onclick="Clear()">
<option value="0"> --SELECT--</option>
<option value="2">One</option>
<option selected="selected" value="3">Two</option>
</select>
答案 0 :(得分:1)
在调试提供的代码片段时,似乎是内部FOR循环的问题,其中j的初始值来自&#34; 2&#34;在第一次运行,反过来建立&#34; ddlCategories2&#34;并且 objCatNext 变为&#34;未定义&#34;。
不确定为什么要在&#34; j&#34;的声明中添加+1?即var j = i + 1;但如果你把j = i,那么它就解决了第一个错误。
function Validate() {
var spnMessage = document.getElementById('message');
for (var i = 0; i < 2; i++) {
var objCat = document.getElementById("ddlCategories" + i);
if (objCat) { //check if objCat is not null or undefined but this has solved the issue.
if (objCat.options[objCat.selectedIndex].text != "--SET--") {
for (var j = i; j < 6; j++) {
var objCatNext = document.getElementById("ddlCategories" + j);
if (objCat.options[objCat.selectedIndex].text == objCatNext.options[objCatNext.selectedIndex].text) {
spnMessage.innerHTML = objCatNext.options[objCatNext.selectedIndex].text + " exists.";
return false;
}
}
} }
}
return true;
}
接下来,宣布&#34; spnMessage&#34;在JS中(截至目前尚未定义)。
工作小提琴 - http://jsfiddle.net/ylokesh/
希望它有所帮助。
一个小建议 - 这将非常有用&amp;如果您在JSFiddle http://jsfiddle.net或codepen http://codepen.io
上创建此代码的工作示例,请快速调试