2

У меня есть еще одна ошибка, вызванная IE7 (отличная программа ...) Я пытаюсь получить раскрывающийся список в функцию javascript, чтобы я мог использовать его значения для спрятал некоторые divs, названные в честь этих значений. но каждый раз, когда я пытаюсь использовать этот DropDownList я получаю следующее сообщение об ошибке: выполнения ошибок Microsoft JScript: DropDownList не определенIE7 javascript error: runtime-error microsoft jscript: dropdownlist не определен

JavaScript:

<script src="/Scripts/ShowHide.js" type="text/javascript"></script> 

function ShowHideDivByDropDownList(dropdownlist) { 
    for (i = 0; i < dropdownlist.options.lenght; i++) { 
     var divId = dropdownlist.options[i].value; 
     if (divId != "") { 
      document.getElementById(divId).style.display = "none"; 
     } 
    } 
    document.getElementById(drowdownlist.value).style.display = "block"; 
} 

DropDownList:

@Html.DropDownList("MainList", 
        new SelectList(Model.ListCategories, 
        Model.List, 
        new { onchange ="ShowHideDivByDropDownList(this)"}) 

EDIT:

Я сделал выделение следов, чтобы попытаться запустить скрипт, выделив людей, похоже, заметил это :) , Я вернул сценарий в исходное состояние, но ошибка все еще происходит.

+0

Ошибка не указана для IE7, удалены теги. Это произойдет в любом браузере даже в Chrome. Я рекомендую проверять такие вещи в большинстве браузеров, прежде чем решать, что это касается одного из них. :) –

+0

@ShadowWizard Это происходит только в IE7, я использую Chrome, и он отлично работает там, также в IE9. Это происходит только при включении режима совместимости в IE9 для имитации IE7. –

+0

Если вы измените код на предупреждение «onchange =» (this); ShowHideDivByDropDownList (this) «' что вы видите в предупреждении при изменении значения? –

ответ

0

В вашем цикле для у вас есть drowdownlish вместо drowdownlist. Просто для здравого смысла вы можете сделать их выпадающий список.

function ShowHideDivByDropDownList(dropdownlistid) { 
    var dropdownlist= document.getElementByName(dropdownlistid); 
    for (i = 0; i < dropdownlist.options.count; i++) { 
     var divId = dropdownlist.options[i].value; 
     if (divId != "") { 
      document.getElementById(divId).style.display = "none"; 
     } 
    } 
    document.getElementById(dropdownlist.value).style.display = "block"; 
} 
+0

ой, прошу прощения за это, пропустил тот, когда я скорректировал именование: P, но это не то, что вызывает проблему. –

1

Если это использование ID getElementById(id), если это использование имени getElementsByName(name)[0].

getElementByName не существует.

Также будьте осторожны с вашими именами переменных ...

+0

Я использовал оба, и оба возвращают ту же ошибку –

0

Вы можете предотвратить себя всю эту кашу, - как this answer правильно сказал, вы должны использовать getElementById, но если вы измените свой код на этот:

onchange ="ShowHideDivByDropDownList(this)" 

затем вы проходите реальный объект в функцию, то вы смело можете иметь такой код вместо:

function ShowHideDivByDropDownList(drowdownlist) { 
    for (var i = 0; i < drowdownlist.options.length; i++) { 
     var divId = drowdownlist.options[i].value; 
     if (divId !== "") { 
      var element = document.getElementById(divId); 
      if (element) 
       element.style.display = "none"; 
     } 
    } 
    var element = document.getElementById(drowdownlist.value); 
    if (element) 
     element.style.display = "block"; 
} 

Пара вещей Я исправил по пути, а также:

  1. В JavaScript, длина массива .length, не .count
  2. В случае нет элемента с таким ID код будет врезаться - чтобы избежать такой неудачи это всегда хорошая практика, чтобы проверить у вас действительно есть такой элемент - вы можете добавить alert("element does not exist"); для цели отладки, но с полным сбоем кода, потому что у вас опечатка не очень хорошо.
Смежные вопросы