我有另一个由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)"})
编辑:
我已经进行了大量的线索调整以尝试让脚本运行,很多人似乎注意到了这一点:)。我已经将脚本恢复到原始状态,但错误仍然存在。
答案 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";
}
我一路上还固定了很多事情:
.length
,而不是.count
alert("element does not exist");
用于调试目的,但整个代码崩溃是因为你有错字不是一件好事。