错误无法获取未定义或空引用的属性“选项”

时间:2015-06-17 11:27:16

标签: javascript undefined nullreferenceexception

  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(&#39;__doPostBack(\&#39;ddlCategories0\&#39;,\&#39;\&#39;)&#39;, 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(&#39;__doPostBack(\&#39;ddlCategories1\&#39;,\&#39;\&#39;)&#39;, 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>

1 个答案:

答案 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

上创建此代码的工作示例,请快速调试