From 425d17de832d281c2577f8d6653030cef95907b5 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Fri, 21 Sep 2012 11:53:03 -0400 Subject: [PATCH] Fix #12583: Don't ignore disabled property of select-one, close gh-932. --- src/attributes.js | 32 +++++++++++++------------------- test/unit/attributes.js | 8 +++++++- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index cde7e4732..76aed2996 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -225,26 +225,25 @@ jQuery.extend({ }, select: { get: function( elem ) { - var value, i, max, option, - index = elem.selectedIndex, - values = [], + var value, option, options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; // Loop through all the selected options - i = one ? index : 0; - max = one ? index + 1 : options.length; for ( ; i < max; i++ ) { option = options[ i ]; - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { // Get the specific value for the option value = jQuery( option ).val(); @@ -259,11 +258,6 @@ jQuery.extend({ } } - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - return values; }, diff --git a/test/unit/attributes.js b/test/unit/attributes.js index 40c81a37c..9c3b55c21 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -718,7 +718,7 @@ test("removeProp(String)", function() { }); test("val()", function() { - expect( 20 + ( jQuery.fn.serialize ? 6 : 0 ) ); + expect( 21 + ( jQuery.fn.serialize ? 6 : 0 ) ); document.getElementById("text1").value = "bla"; equal( jQuery("#text1").val(), "bla", "Check for modified value of input element" ); @@ -761,6 +761,12 @@ test("val()", function() { jQuery("#select5").val(3); equal( jQuery("#select5").val(), "3", "Check value on ambiguous select." ); + strictEqual( + jQuery("").val(), + null, + "Select-one with only option disabled (#12584)" + ); + if ( jQuery.fn.serialize ) { var checks = jQuery("").appendTo("#form"); -- 2.39.5