Ошибка JavaScript в IE7: ошибка времени выполнения Microsoft JScript: раскрывающийся список не определен - PullRequest
2 голосов
/ 13 февраля 2012

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

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";
}

выпадающий список:

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

EDIT:

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

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Если это идентификатор, используйте getElementById(id), если это имя, используйте getElementsByName(name)[0].

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

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

0 голосов
/ 14 февраля 2012

Вы можете предотвратить весь этот беспорядок - как правильно сказал этот ответ , вы должны использовать 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. В случае, если нет элемента с таким идентификатором, ваш код будет зависать - во избежание такой ошибки всегда полезно проверить, действительно ли у вас есть такой элемент - вы можете добавить alert("element does not exist");в целях отладки, но весь крах кода из-за опечатки не очень хорошая вещь.
0 голосов
/ 13 февраля 2012

В вашем для цикле у вас есть 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";
}
...