这个陈述有什么问题吗? (JavaScript)的

时间:2010-07-11 15:15:33

标签: javascript

我想知道以下陈述是否有任何问题。

document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value

我问这个因为,有时似乎工作正常,其余时间,它会引发错误 - 对象不支持此属性或方法。

BTW,monthId是asp.net页面中gridview中显示的下拉列表的clientID。

谢谢!

4 个答案:

答案 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属性存在,并且执行与此处相同的基本操作。

一旦你顺利地工作,你知道将要发生什么,你可以开始删除不需要的变量并返回原来的行,但是为了调试,在每一行上都有一个操作更简单使用单独的变量,以便调试器可以向您显示正在发生的事情。

您可能想要了解undefinednull之间的区别,并且有关于此主题的各种页面,但这个页面并不算太差。

http://weblogs.asp.net/bleroy/archive/2005/02/15/Three-common-mistakes-in-JavaScript-2F00-EcmaScript.aspx

答案 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