2015-06-17 1 views
0
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.Ошибка Невозможно получить свойство «опции» неопределенного или нулевой ссылки

Error: Unable to get property 'options' of undefined or null reference

Я попытался чтобы проверить, нет ли objCat не null или undefined, но исключение все еще бросается, снова только в 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> 
+0

что соответствующий HTML? – Leo

+0

@Leo Я обновил свое оригинальное сообщение с помощью html. – StackTrace

+1

@Craicerjack он должен работать, 'null' является ложным. – Leo

ответ

1

При отладке предоставленного фрагмента кода, похоже, вопрос с внутреннем циклом где начальное значение J приходит как «2» при первом запуске, который, в свою очередь, строит «ddlCategories2» и objCatNext становится «неопределенным».

Не знаете, почему вы добавляете +1 с объявлением «j» i.e. 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; 
} 

Далее, объявить «spnMessage» в JS (он на данный момент не определен).

Рабочая Fiddle - http://jsfiddle.net/ylokesh/

Надеется, что это помогает.

Одно маленькое предложение - Было бы очень полезно & быстро отлаживать, если вы создаете рабочий пример этого кода либо на JSFiddle http://jsfiddle.net или codepen http://codepen.io

+0

@Craicerjack вы правы. Обратная связь. Ответ обновляется с предложением как заголовком. Это имеет смысл поставить предложение на дно? –

Смежные вопросы