IE7的javascript错误:运行时错误微软的jscript:dropdownlist没有定义

IE7的javascript错误:运行时错误微软的jscript:dropdownlist没有定义

问题描述:

我有另一个错误造成的IE7(伟大的程序...)我想获得一个下拉列表到一个JavaScript函数,以便我可以使用它的值隐藏了一些以这些值命名的div。但每次我尝试使用此下拉列表我得到以下错误: 运行时错误Microsoft JScript中的:下拉列表没有定义IE7的javascript错误:运行时错误微软的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)"}) 

编辑:

我已经做了试验的脚本调整分配,使脚本运行,配置的人似乎已经注意到了这一点:) 。我已经返回脚本到它的原始状态,但错误仍然发生。

+0

该错误不是特定于IE7,删除标记。它会发生在任何浏览器,甚至是伟大的Chrome上。我建议在决定特定于其中之一之前,在更多浏览器上检查这些内容。 :) – 2012-02-14 08:59:12

+0

@ShadowWizard它只发生在IE7上,我使用Chrome浏览器,它的工作原理非常好,在IE9上也是如此,只有当我在IE9上打开兼容模式来模拟IE7时才会发生。 – 2012-02-14 09:54:11

+0

如果您将代码更改为'onchange =“alert(this); ShowHideDivByDropDownList(this)”'您在更改值时在警报中看到了什么? – 2012-02-14 10:42:37

在你循环您有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,但它不是什么导致问题。 – 2012-02-14 08:46:02

如果它是一个ID使用getElementById(id),如果它是一个名称使用getElementsByName(name)[0]

getElementByName不存在。

另外要小心你的变量名...

+0

我已经使用了两个,并且都返回相同的错误 – 2012-02-14 09:06:59

您可以防止自己这一切混乱 - 为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");用于调试目的,但让整个代码崩溃,因为你有错字不是一件好事。