我正在使用jquery 1.2.6(无法升级,因为它是系统的一部分)。 我收到了一个奇怪的错误。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
</head>
<body>
<select id="state" name="state">
<option selected="selected"></option>
<option value="none">N/A</option>
<option value="AK">AK</option>
<option value="AL">AL</option>
<option value="AR">AR</option>
<option value="AZ">AZ</option>
<option value="CA">CA</option>
</select>
</body>
</html>
<script type="text/javascript">
$(function() {
var test = $('#state').val();
});
</script>
当我在IE9中测试时,我在加载页面时遇到此错误:
"Unable to get value of the property 'specified': object is null or undefined"
为什么?
答案 0 :(得分:4)
The value in an option is optional(“如果没有,则option元素的值是元素的textContent。”)。所以你似乎在这里遇到了一个错误。
我看了the old jQuery source code,发现了这个错误:
value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
option.attributes.value
未定义,因此option.attributes.value.specified
崩溃。
由于bug存在于jQuery中(更准确地说,似乎是试图解决现在修复的旧IE错误),在这个特定任务上不使用jQuery是合法的。
我建议使用vanilla JS解决方案作为解决方法,而不是更改HTML(您的HTML很好):
var test = document.getElementById('state').value;
请注意,当我说这个bug是在jQuery中时,它主要意味着在尝试解决2008浏览器的bug时,在最新版本的IE中,2008版jQuery失败了。你应该告诉你的架构师保持这个旧的jQuery不是一个合理的决定。
答案 1 :(得分:2)
您选择的选项没有设置值,所以这就是抱怨的原因:)