jQuery 1.10.1在select上设置非现有值

时间:2014-04-10 09:07:11

标签: javascript jquery select

有人可以解释这种行为:

<select id ="test">
       <option value="-1">---All---</option>
       <option value="1">first</option>
       <option value="2">second</option>
</select>

$('#test').val(200);

使用jQuery 1.10.1,select的值为null, 但是使用jQuery 1.9.1,该值是第一个选项。

jsFiddle

3 个答案:

答案 0 :(得分:6)

  

使用jQuery 1.10.1,select的值为null,但使用jQuery 1.9.1时,该值是第一个选项。

它是bug #13514的修复程序,修复于v1.10。设置无效值应清除select(在v1.10 +中执行),而不是将其保留为默认(第一个)选项(v1.9)。

答案 1 :(得分:1)

我想你想试试,

$('#test').val(2);
如果下拉值不存在,则

noneselected(或默认选中)。

Demo

问题来自Blackberry 4.7 attributes.value

1.9 version1.10 version的变化是

jQuery 1.9.1 hook

jQuery.extend({
    valHooks: {
        option: {
            get: function( elem ) {
                // attributes.value is undefined in Blackberry 4.7 but
                // uses .value. See #6932
                var val = elem.attributes.value;
                return !val || val.specified ? elem.value : elem.text;
            }
        },

jQuery 1.10 hook

jQuery.extend({
    valHooks: {
        option: {
            get: function( elem ) {
                // Use proper attribute retrieval(#6932, #12072)
                var val = jQuery.find.attr( elem, "value" );
                return val != null ?
                    val :
                    elem.text;
            }
        }

阅读#6932 Blackberry 4.7: .val() on empty option fails

答案 2 :(得分:0)

可能在jQuery 1.9.1中,如果提供任何不存在的值,则首先是默认选项,而jQuery 1.10.1在这种情况下不选择任何内容。
您应该将要选择的option的值传递给val()。 200不是任何选项的值。