我想知道以下陈述是否有任何问题。
document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value
我问这个因为,有时似乎工作正常,其余时间,它会引发错误 - 对象不支持此属性或方法。
BTW,monthId是asp.net页面中gridview中显示的下拉列表的clientID。
谢谢!
答案 0 :(得分:2)
如果下拉列表中未选择任何值,selectedIndex
将为-1。
答案 1 :(得分:0)
如果没有更多的代码作为上下文,很难评估。但是如果没有选择索引,那么在没有对这行代码进行健全性检查的情况下,我会发现它会因索引超出范围类型而失败。
答案 2 :(得分:0)
使用getElementById
时,我倾向于进行错误检查。我希望这就是你的问题所在。
试试这个,然后在调试器中测试它,但我会发出警告。
var elem = document.getElementById(monthId);
if (elem.options) {
options[document.getElementById(monthId).selectedIndex].value
} else {
alert("elem doesn't have an options property");
}
您可能不想假设value
属性存在,并且执行与此处相同的基本操作。
一旦你顺利地工作,你知道将要发生什么,你可以开始删除不需要的变量并返回原来的行,但是为了调试,在每一行上都有一个操作更简单使用单独的变量,以便调试器可以向您显示正在发生的事情。
您可能想要了解undefined
和null
之间的区别,并且有关于此主题的各种页面,但这个页面并不算太差。
答案 3 :(得分:0)
您可以通过在IE开发工具,Firebug,Opera dragonfly或Chrome开发工具中为您的代码添加断点来调试您的问题,并检查您的值。
或者您可以添加警告语句来检查您的值。我个人认为当selectedIndex为-1时代码出错(当没有选择任何内容时会发生selectedIndex = -1)。 自己检查一下:
alert(document.getElementById(monthId)); // Returns null if nothing is found
alert(document.getElementById(monthId).selectedIndex); // If the selectedIndex is below 0 it could cause your error
document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value