Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 7079

Show
Ignore:
Timestamp:
06/22/07 15:44:15 (1 year ago)
Author:
mislav
Message:

Prototype: in form serialization, change how submit buttons are handled. The new behavior is to serialize just one submit button (the first by default). You can explicitly name the button you want serialized with the "submit" parameter in the params hash passed to Form#serialize or Form.serializeElements. References #5031. [Mislav Marohnić]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/prototype/branches/form/src/form.js

    r7072 r7079  
    55  }, 
    66   
    7   serializeElements: function(elements, getHash) { 
     7  serializeElements: function(elements, options) { 
     8    if (typeof options != 'object') options = { hash: !!options }; 
     9    else if (options.hash === undefined) options.hash = true; 
     10    var key, value, submitted = false, submit = options.submit; 
     11     
    812    var data = elements.inject({}, function(result, element) { 
    913      if (!element.disabled && element.name) { 
    10         var key = element.name, value = $(element).getValue(); 
    11         if (value != null) {  
    12                 if (key in result) { 
     14        key = element.name; value = $(element).getValue(); 
     15        if (value != null && (element.type != 'submit' || (!submitted && 
     16            submit !== false && (!submit || key == submit) && (submitted = true)))) {  
     17          if (key in result) { 
     18            // a key is already present; construct an array of values 
    1319            if (result[key].constructor != Array) result[key] = [result[key]]; 
    1420            result[key].push(value); 
     
    2026    }); 
    2127     
    22     return getHash ? data : Hash.toQueryString(data); 
     28    return options.hash ? data : Hash.toQueryString(data); 
    2329  } 
    2430}; 
    2531 
    2632Form.Methods = { 
    27   serialize: function(form, getHash) { 
    28     return Form.serializeElements(Form.getElements(form), getHash); 
     33  serialize: function(form, options) { 
     34    return Form.serializeElements(Form.getElements(form), options); 
    2935  }, 
    3036   
  • spinoffs/prototype/branches/form/test/unit/form.html

    r7078 r7079  
    346346      assertEnumEqual(Hash.toQueryString(expected).split('&').sort(), 
    347347                      Form.serialize('various').split('&').sort()); 
     348      assertEqual('string', typeof $('form').serialize({ hash:false })); 
    348349 
    349350      // Checks that disabled element is not included in serialized form. 
    350351      $('input_enabled').enable(); 
    351       assertHashEqual({ 
    352                         val1:4, action:'blah', 
    353                         first_submit:'Commit it!', second_submit:'Delete it!' 
    354                       }, 
     352      assertHashEqual({ val1:4, action:'blah', first_submit:'Commit it!' }, 
    355353                      $('form').serialize(true)); 
    356354 
     
    370368      params = Form.serialize('selects_wrapper', true); 
    371369      assertHashEqual(Object.extend(expected, { vu:1, 'vm[]':[1, 3], nvu:'One' }), params); 
     370 
     371      // explicit submit button 
     372      assertHashEqual({ val1:4, action:'blah', second_submit:'Delete it!' }, 
     373                      $('form').serialize({ submit: 'second_submit' })); 
     374      assertHashEqual({ val1:4, action:'blah' }, 
     375                      $('form').serialize({ submit: false })); 
     376      assertHashEqual({ val1:4, action:'blah' }, 
     377                      $('form').serialize({ submit: 'inexistent' })); 
    372378    }}, 
    373379     
  • spinoffs/prototype/branches/form/TODO

    r7078 r7079  
    22* [done] findFirstElement takes tabindexes into account (r6628 fixes #7595) 
    33* [wontfix] is #3065 (findFirstElement) something the framework should care about? 
     4* [done] fix #5031: Form.serialize with multiple submit buttons (related: #8211) 
    45* Ability to intercept serialization for individual elements 
    5 * fix #5031: Form.serialize with multiple submit buttons (related: #8211) 
    66* research if #6326 (selectedIndex changes on hover) can be fixed 
    77* #7909 (application/xhtml+xml) is a blocker (is this a DOM extensions issue??)