jQuery 1.10.1 setting non existing value on select

2020-03-21 05:21发布

Can someone explain this behavior:

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

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

Using the jQuery 1.10.1 the value of the select is null, but using jQuery 1.9.1 the value is the first option.

jsFiddle

3条回答
Ridiculous、
2楼-- · 2020-03-21 05:52

I think you want to try,

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

none is selected (or default selected) if the drop-down value not exists.

Demo

The issue comes in Blackberry 4.7 having attributes.value

The change in 1.9 version and 1.10 version are

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;
            }
        },

And 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;
            }
        }

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

查看更多
够拽才男人
3楼-- · 2020-03-21 05:59

May be in jQuery 1.9.1 first is the default option if you provide any non-existing value while jQuery 1.10.1 don't select anything in such case.
You should pass value of option which you wan to select to val(). 200 is a not present as value for any option.

查看更多
做自己的国王
4楼-- · 2020-03-21 06:09

Using the jQuery 1.10.1 the value of the select is null, but using jQuery 1.9.1 the value is the first option.

It's the fix to bug #13514, fixed in v1.10. Setting an invalid value should clear the select (which it does in v1.10+), not leave it at the default (first) option (v1.9).

查看更多
登录 后发表回答