[Ajax] prototype.js にハマル
最近 Ruby on Rails を使い Ajax バリバリで、ある仕事用のプロトタイプを作ってます。
Ajax を使うのは初めてですが、Rails のAjaxタグをちょっと直したりしながらなんとか順調に進んでいました。
しかし、今日 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 となるのでコードはほとんどそのままで何とかなりました ^^);