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

Changeset 6529

Show
Ignore:
Timestamp:
04/16/07 10:57:07 (1 year ago)
Author:
mislav
Message:

changed setValue to work on select boxes with actual values, not indices

Files:

Legend:

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

    r6528 r6529  
    186186 
    187187var Field = Form.Element; 
    188 var $F = function(el, value) { 
    189   return Form.Element[value === undefined ? 'getValue' : 'setValue'](el, value);  
     188var $F = function(element, value) { 
     189  return Form.Element[value === undefined ? 'getValue' : 'setValue'](element, value);  
    190190} 
    191191 
     
    204204 
    205205  inputSelector: function(element, value) { 
    206     return value === undefined ? 
    207       (element.checked ? element.value : null) : 
    208       (element.checked = !!value); 
     206    if (value === undefined) return element.checked ? element.value : null; 
     207    else element.checked = !!value; 
    209208  }, 
    210209 
    211210  textarea: function(element, value) { 
    212     return value === undefined ? element.value : (element.value = value); 
    213   }, 
    214    
    215   select: function(element, indexes) { 
    216     return this[element.type == 'select-one' ?  
    217       'selectOne' : 'selectMany'](element, indexes); 
    218   }, 
    219    
    220   selectOne: function(element, index) { 
    221     if (index === undefined) { 
    222       index = element.selectedIndex; 
    223       return index >= 0 ? this.optionValue(element.options[index]) : null; 
    224     } 
    225     else element.selectedIndex = index; 
    226   }, 
    227    
    228   selectMany: function(element, indexes) { 
     211    if (value === undefined) return element.value; 
     212    else element.value = value; 
     213  }, 
     214   
     215  select: function(element, index) { 
     216    if (index === undefined) 
     217      return this[element.type == 'select-one' ?  
     218        'selectOne' : 'selectMany'](element); 
     219    else { 
     220      var opt, value, single = index.constructor != Array; 
     221      for (var i = 0, length = element.length; i < length; i++) { 
     222        opt = element.options[i]; 
     223        value = this.optionValue(opt); 
     224        if (single) { 
     225          if (value == index) { 
     226            opt.selected = true; 
     227            return; 
     228          } 
     229        } 
     230        else opt.selected = index.include(value); 
     231      } 
     232    } 
     233  }, 
     234   
     235  selectOne: function(element) { 
     236    var index = element.selectedIndex; 
     237    return index >= 0 ? this.optionValue(element.options[index]) : null; 
     238  }, 
     239   
     240  selectMany: function(element) { 
    229241    var values, length = element.length; 
    230242    if (!length) return null; 
    231     if (indexes !== undefined && indexes.constructor != Array) indexes = [indexes]; 
    232243     
    233244    for (var i = 0, values = []; i < length; i++) { 
    234245      var opt = element.options[i]; 
    235       if (indexes === undefined) { if (opt.selected) values.push(this.optionValue(opt)); } 
    236       else opt.selected = indexes.include(i); 
     246      if (opt.selected) values.push(this.optionValue(opt)); 
    237247    } 
    238248    return values; 
  • spinoffs/prototype/branches/form/test/unit/form.html

    r6528 r6529  
    401401      // selectbox 
    402402      input = $('form_selects')['vu']; 
    403       input.setValue(2); 
     403      input.setValue('3'); 
    404404      assertEqual('3', input.getValue()); 
    405       input.setValue(0); 
     405      input.setValue('1'); 
    406406      assertEqual('1', input.getValue()); 
    407407      // multiple select 
    408408      input = $('form_selects')['vm[]']; 
    409       input.setValue([1, 2]); 
     409      input.setValue(['2', '3']); 
    410410      assertEnumEqual(['2', '3'], input.getValue()); 
    411       input.setValue(0); 
    412       assertEnumEqual(['1'], input.getValue()); 
    413       input.setValue([0, 2]); 
     411      // should this work? 
     412      // input.setValue('1'); 
     413      // assertEnumEqual(['1'], input.getValue()); 
     414      input.setValue(['1', '3']); 
    414415      assertEnumEqual(['1', '3'], input.getValue()); 
    415416    }}