この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。
KBMJでRuby on Rails を使ったweb開発に携わっているyoppiといいます。
今回はRubyの開発で僕がよく使うsend的なことをJavaScriptでやる方法を紹介したいと思います。
早速サンプルコードを紹介します。
01 <html>
02 <head>
03 <%= javascript_include_tag 'prototype' %>
04 <%= javascript_tag %Q{
05 var testObj = {
06 a: function (){
07 alert('a called!');
08 },
09
10 b: function (){
11 alert('b called!');
12 }
13 }
14
15 function execute(event){
16 testObj[$F(Event.element(event))]();
17 }
18 }%>
19 </head>
20 <body>
21 <from>
22 <%= radio_button_tag 'funcName', 'a', true, :id => 'funcNameA' %>a
23 <%= radio_button_tag 'funcName', 'b', false, :id => 'funcNameB' %>b
24 <%= javascript_tag %Q{
25 Event.observe('funcNameA', 'click', execute);
26 Event.observe('funcNameB', 'click', execute);
27 }%>
28 </form>
29 </body>
30 </html>
一応Railsエンジニアなので、コードがRailsなのはご容赦ください。
肝心のところは、16行目の
testObj[$F(Event.element(event))]();
の部分ですね。
サンプルは、ラジオボタンの値の取得処理でゴチャっとなってますが、
testObj[実行したい関数名]();
ということです。
まあ、testObj[実行したい関数名].call()でも同様なことができるんですけどね。試しにcall使わない方法をやってみたらできたので、こっちを紹介させていただきました。もちろん引数がある関数に引数を渡すこともできます。
ちなみに、IE7,IE8,Firefox3,Firefox3.5でのみ確認しています。もしかしたら、ブラウザによっては使えないかもしれません。もし、動作確認していただけたならコメントでお知らせしていただければと思います。
それでは。