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

Ticket #6326: 6326-hideous-hack.patch

File 6326-hideous-hack.patch, 2.0 kB (added by kruse, 1 year ago)

Potential fix using "hideous hack"

  • src/form.js

    old new  
    227227    this.element   = $(element); 
    228228    this.callback  = callback; 
    229229     
     230    // #6326 - hideous hack! 
     231    var fixSelectedIndex = function(element) { 
     232      element._selectedIndex = element.selectedIndex; 
     233      element.observe('change', function(event) { 
     234        var target = Event.element(event); 
     235        target._selectedIndex = target.selectedIndex; 
     236      }); 
     237    }; 
     238    if ('select' == this.element.tagName.toLowerCase()) { 
     239      fixSelectedIndex(this.element); 
     240    } 
     241    if ('form' == this.element.tagName.toLowerCase()) { 
     242      $A(this.element.getElementsByTagName('select')).each(fixSelectedIndex); 
     243    } 
     244     
    230245    this.lastValue = this.getValue(); 
    231246    this.registerCallback(); 
    232247  }, 
     
    249264Form.Element.Observer = Class.create(); 
    250265Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { 
    251266  getValue: function() { 
    252     return Form.Element.getValue(this.element); 
     267    if ('select' == this.element.tagName.toLowerCase()) { 
     268      // #6326 - hideous hack! 
     269      return this.element._selectedIndex >= 0 
     270        ? Form.Element.Serializers.optionValue(this.element.options[this.element._selectedIndex]) 
     271        : null; 
     272    } else { 
     273      return Form.Element.getValue(this.element); 
     274    } 
    253275  } 
    254276}); 
    255277 
    256278Form.Observer = Class.create(); 
    257279Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { 
    258280  getValue: function() { 
    259     return Form.serialize(this.element); 
     281    var data = Form.serialize(this.element, true); 
     282     
     283    // #6326 - hideous hack! 
     284    $A(this.element.getElementsByTagName('select')).each(function(element) { 
     285      if (!element.disabled && element.name) { 
     286        data[element.name] = element._selectedIndex >= 0 
     287          ? Form.Element.Serializers.optionValue(element.options[element._selectedIndex]) 
     288          : null; 
     289      } 
     290    }); 
     291     
     292    return Hash.toQueryString(data); 
    260293  } 
    261294}); 
    262295