IE7 javascript错误:运行时错误microsoft jscript:dropdownlist未定义

时间:2012-02-13 15:26:28

标签: javascript asp.net-mvc-3 drop-down-menu internet-explorer-7

我有另一个由IE7引起的错误(伟大的程序...)我试图将一个下拉列表放入一个javascript函数,以便我可以使用它的值隐藏一些以这些值命名的div。但每次我尝试使用此下拉列表时,我都会收到以下错误: 运行时错误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";
}

下拉列表:

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

编辑:

我已经进行了大量的线索调整以尝试让脚本运行,很多人似乎注意到了这一点:)。我已经将脚本恢复到原始状态,但错误仍然存​​在。

3 个答案:

答案 0 :(得分:1)

如果是ID,请使用getElementById(id),如果是名称则使用getElementsByName(name)[0]

getElementByName不存在。

还要小心你的变量名......

答案 1 :(得分:0)

for 循环中,您有 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";
}

答案 2 :(得分: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");用于调试目的,但整个代码崩溃是因为你有错字不是一件好事。