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)"})
编辑:
我已经做了试验的脚本调整分配,使脚本运行,配置的人似乎已经注意到了这一点:) 。我已经返回脚本到它的原始状态,但错误仍然发生。
在你为循环您有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";
}
哦对了,对此遗憾,错过了一个时,我调整了命名:P,但它不是什么导致问题。 – 2012-02-14 08:46:02
如果它是一个ID使用getElementById(id)
,如果它是一个名称使用getElementsByName(name)[0]
。
getElementByName
不存在。
另外要小心你的变量名...
我已经使用了两个,并且都返回相同的错误 – 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";
}
夫妇我一路上固定以及:
- 在JavaScript中,数组的长度
.length
,不.count
- 如果有这样的ID没有元素你的代码就会崩溃 - 避免这种事故,它总是以验证好的做法你真的有这样的元素 - 你可以添加
alert("element does not exist");
用于调试目的,但让整个代码崩溃,因为你有错字不是一件好事。
该错误不是特定于IE7,删除标记。它会发生在任何浏览器,甚至是伟大的Chrome上。我建议在决定特定于其中之一之前,在更多浏览器上检查这些内容。 :) – 2012-02-14 08:59:12
@ShadowWizard它只发生在IE7上,我使用Chrome浏览器,它的工作原理非常好,在IE9上也是如此,只有当我在IE9上打开兼容模式来模拟IE7时才会发生。 – 2012-02-14 09:54:11
如果您将代码更改为'onchange =“alert(this); ShowHideDivByDropDownList(this)”'您在更改值时在警报中看到了什么? – 2012-02-14 10:42:37