From a27b5d0468acc5dd8cdfcbff9464546b353e3c04 Mon Sep 17 00:00:00 2001 From: Ariel Flesler Date: Wed, 23 Jul 2008 17:00:32 +0000 Subject: [PATCH 1/1] jquery core: closes #2652. val() supports option elements, also simplified the code. --- src/core.js | 5 ++++- test/index.html | 1 + test/unit/core.js | 16 ++++++++++++++-- test/unit/selector.js | 4 ++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/core.js b/src/core.js index c095f74..74fd6fc 100644 --- a/src/core.js +++ b/src/core.js @@ -362,6 +362,9 @@ jQuery.fn = jQuery.prototype = { if ( this.length ) { var elem = this[0]; + if( jQuery.nodeName( elem, 'option' ) ) + return (elem.attributes.value || {}).specified ? elem.value : elem.text; + // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, @@ -379,7 +382,7 @@ jQuery.fn = jQuery.prototype = { if ( option.selected ) { // Get the specifc value for the option - value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; + value = jQuery(option).val(); // We don't need an array for one selects if ( one ) diff --git a/test/index.html b/test/index.html index 0127c43..6ac509b 100644 --- a/test/index.html +++ b/test/index.html @@ -86,6 +86,7 @@ + diff --git a/test/unit/core.js b/test/unit/core.js index 864f77a..165d8d1 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -1142,11 +1142,23 @@ test("jQuery.extend(Object, Object)", function() { }); test("val()", function() { - expect(3); + expect(8); + equals( jQuery("#text1").val(), "Test", "Check for value of input element" ); // ticket #1714 this caused a JS error in IE equals( jQuery("#first").val(), "", "Check a paragraph element to see if it has a value" ); ok( jQuery([]).val() === undefined, "Check an empty jQuery object will return undefined from val" ); + + equals( jQuery('#select2').val(), '3', 'Call val() on a single="single" select' ); + + isSet( jQuery('#select3').val(), ['1', '2'], 'Call val() on a multiple="multiple" select' ); + + equals( jQuery('#option3c').val(), '2', 'Call val() on a option element with value' ); + + equals( jQuery('#option3a').val(), '', 'Call val() on a option element with empty value' ); + + equals( jQuery('#option3e').val(), 'no value', 'Call val() on a option element with no value attribute' ); + }); test("val(String/Number)", function() { @@ -1235,7 +1247,7 @@ test("not()", function() { isSet( jQuery("p").not("#ap, #sndp, .result").get(), q("firstp", "en", "sap", "first"), "not('selector, selector')" ); isSet( jQuery("p").not(jQuery("#ap, #sndp, .result")).get(), q("firstp", "en", "sap", "first"), "not(jQuery)" ); equals( jQuery("p").not(document.getElementsByTagName("p")).length, 0, "not(Array-like DOM collection)" ); - isSet( jQuery("#form option").not("option.emptyopt:contains('Nothing'),[selected],[value='1']").get(), q("option1c", "option1d", "option2c", "option3d" ), "not('complex selector')"); + isSet( jQuery("#form option").not("option.emptyopt:contains('Nothing'),[selected],[value='1']").get(), q("option1c", "option1d", "option2c", "option3d", "option3e" ), "not('complex selector')"); var selects = jQuery("#form select"); isSet( selects.not( selects[1] ), q("select1", "select3"), "filter out DOM element"); diff --git a/test/unit/selector.js b/test/unit/selector.js index c8a6e93..d4830a8 100644 --- a/test/unit/selector.js +++ b/test/unit/selector.js @@ -195,8 +195,8 @@ test("pseudo (:) selectors", function() { t( "Text Contains", "a:contains('Google Groups')", ["groups"] ); t( "Element Preceded By", "p ~ div", ["foo","fx-queue","fx-tests", "moretests"] ); t( "Not", "a.blog:not(.link)", ["mark"] ); - t( "Not - multiple", "#form option:not(:contains('Nothing'),#option1b,:selected)", ["option1c", "option1d", "option2b", "option2c", "option3d"] ); - t( "Not - complex", "#form option:not([id^='opt']:gt(0):nth-child(-n+3))", [ "option1a", "option1d", "option2d", "option3d"] ); + t( "Not - multiple", "#form option:not(:contains('Nothing'),#option1b,:selected)", ["option1c", "option1d", "option2b", "option2c", "option3d", "option3e"] ); + t( "Not - complex", "#form option:not([id^='opt']:gt(0):nth-child(-n+3))", [ "option1a", "option1d", "option2d", "option3d", "option3e"] ); t( "Not - recursive", "#form option:not(:not(:selected))[id^='option3']", [ "option3b", "option3c"] ); t( "nth Element", "p:nth(1)", ["ap"] ); -- 1.7.10.4