jquery在Internet Explorer中选择框bug

时间:2012-12-12 09:16:52

标签: jquery internet-explorer

我正在使用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" 

为什么?

2 个答案:

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

您选择的选项没有设置值,所以这就是抱怨的原因:)