diff options
author | John Resig <jeresig@gmail.com> | 2007-09-05 17:06:05 +0000 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2007-09-05 17:06:05 +0000 |
commit | f96bf1041553775a94c1034c97e253e350217173 (patch) | |
tree | ec325ec45526f3caddac0157f98645ca7aaad64c /src/jquery/jquery.js | |
parent | f28f199dc0a353135ef8b9afa2f3d25c6ffd2c75 (diff) | |
download | jquery-f96bf1041553775a94c1034c97e253e350217173.tar.gz jquery-f96bf1041553775a94c1034c97e253e350217173.zip |
Integration of Mike Alsup's excellent form serialization code. The benefits are as follows:
- New method: .serializeArray()
This returns an array of name/value pairs representing the contents of a form, or individual input elements.
- Enhancement: .serialize()
The results are correct now (as opposed to the mess from before), and allows you to serializes forms directly (rather than just the input elements).
- Enhancement: .val()
This now returns the correct value when dealing wih selects. Additionally, when dealing with multiple selects, it returns an array of values.
Based upon Mike's code:
http://malsup.com/jquery/form/comp/form.js
and test suite:
http://malsup.com/jquery/form/comp/test.html
Diffstat (limited to 'src/jquery/jquery.js')
-rw-r--r-- | src/jquery/jquery.js | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 9e59f9dad..d5a32e24d 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -306,9 +306,32 @@ jQuery.fn = jQuery.prototype = { }, val: function( val ) { - return val == undefined ? - ( this.length ? this[0].value : null ) : - this.attr( "value", val ); + if ( val == undefined ) { + if ( this.length ) { + var elem = this[0]; + + // We need to handle select boxes special
if ( jQuery.nodeName(elem, "select") ) {
var index = elem.selectedIndex, + a = [], + options = elem.options, + one = elem.type == "select-one"; + + // Nothing was selected
if ( index < 0 ) + return null;
+ + // Loop through all the selected options
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[i];
if ( option.selected ) {
// Get the specifc value for the option
var val = jQuery.browser.msie && !option.attributes["value"].specified ? option.text : option.value; + + // We don't need an array for one selects
if ( one ) + return val; + + // Multi-Selects return an array
a.push(val);
}
} +
return a; + + // Everything else, we just grab the value
} else + return this[0].value.replace(/\r/g, ""); + } + } else + return this.attr( "value", val ); }, html: function( val ) { |