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

Ticket #7595: form_findFirstElement.diff

File form_findFirstElement.diff, 2.5 kB (added by tdd, 2 years ago)
  • test/unit/form.html

    old new  
    9090  <input type="text" /> 
    9191</form> 
    9292 
     93<form id="form_ffe"> 
     94  <p><input type="text" disabled="disabled" id="ffe_disabled" /></p> 
     95  <input type="hidden" id="ffe_hidden" /> 
     96  <input type="checkbox" id="ffe_checkbox" /> 
     97</form> 
     98 
     99<form id="form_ffe_ti"> 
     100  <p><input type="text" disabled="disabled" id="ffe_ti_disabled" /></p> 
     101  <input type="hidden" id="ffe_ti_hidden" /> 
     102  <input type="checkbox" id="ffe_ti_checkbox" /> 
     103  <input type="submit" id="ffe_ti_submit" tabindex="1" /> 
     104</form> 
     105 
     106<form id="form_ffe_ti2"> 
     107  <p><input type="text" disabled="disabled" id="ffe_ti2_disabled" /></p> 
     108  <input type="hidden" id="ffe_ti2_hidden" /> 
     109  <input type="checkbox" id="ffe_ti2_checkbox" tabindex="0" /> 
     110  <input type="submit" id="ffe_ti2_submit" tabindex="1" /> 
     111</form> 
     112 
    93113<!-- Tests follow --> 
    94114<script type="text/javascript" language="javascript" charset="utf-8"> 
    95115// <![CDATA[ 
     
    251271      assert(formInputs2 instanceof Array); 
    252272      assert(formInputs2.all(function(input) { return (input.tagName == "INPUT"); })); 
    253273    }}, 
     274 
     275    testFormFindFirstElement: function() {with(this) { 
     276      assertEqual($('ffe_checkbox'), $('form_ffe').findFirstElement()); 
     277      assertEqual($('ffe_ti_submit'), $('form_ffe_ti').findFirstElement()); 
     278      assertEqual($('ffe_ti2_checkbox'), $('form_ffe_ti2').findFirstElement()); 
     279    }}, 
    254280     
    255281    testFormSerialize: function() {with(this){ 
    256282      assertEqual('tf_selectOne=&tf_textarea=&tf_text=&tf_hidden=&tf_password=',  
  • src/form.js

    old new  
    7272  }, 
    7373 
    7474  findFirstElement: function(form) { 
    75     return $(form).getElements().find(function(element) { 
     75    var elements = $(form).getElements().findAll(function(element) { 
     76      return 'hidden' != element.type && !element.disabled; 
     77    }); 
     78    var tiFirst = elements.findAll(function(element) { 
     79      return element.hasAttribute('tabIndex') && element.tabIndex >= 0; 
     80    }).sortBy(function(element) { return element.tabIndex; }).first(); 
     81    if (tiFirst) return tiFirst; 
     82 
     83    return elements.find(function(element) { 
    7684      return element.type != 'hidden' && !element.disabled && 
    7785        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); 
    7886    });