[Ajax] prototype.js にハマル

最近 Ruby on Rails を使い Ajax バリバリで、ある仕事用のプロトタイプを作ってます。
Ajax を使うのは初めてですが、RailsAjaxタグをちょっと直したりしながらなんとか順調に進んでいました。

しかし、今日 select タグを使ったら、変な動きにハマッテしましました。

<select id="sel" name="sel" onchange="new Ajax.Updater(....省略....>
  <option value="0"> なし </option>
  <option value="1"> 正しい </option>
</select>

ここで、「なし」が選択されると Rails にはなぜか sel=なし というパラメターが渡ってくるのです !?
かなりの時間ジタバタして やっと判りました〜 !!

「正しい」を選択したときは、 sel=1 が渡ってくるのです。 prototype.js を眺めていたら、以下のようなコードを発見しました ^^);

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value || opt.text;
    }
    return [element.name, value];
  },

value = opt.value || opt.text; ってわけで、 value が 0 とか "" だと textの方が GET/POST値になってしまうのですね。

とりあえず、 以下のようにしました。

<select id="sel" name="sel" onchange="new Ajax.Updater(....省略....>
  <option value="0n"> なし </option>
  <option value="1n"> 正しい </option>
</select>

Ruby では "1n".to_i  # => 1 となるのでコードはほとんどそのままで何とかなりました ^^);