2011-12-31 21 views
8

私はこのトピックに関するすべての質問と回答を閲覧しましたが、まだシナリオの作業を行うことができません。 ドロップダウンメニューオプションが選択されているときにクリックボタンアクションをトリガーしたい。シンプルであり、AJAXと非常に共通しているはずです。Ruby on RailsのselectとonChangeのフォーム

<%= form_for(@test, :html => {:id => "form_id", :name => "MyForm", :remote => "true"}) do |form| %> 
    <%= form.label "Menu1" %> 
    <%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], :html_options=>{:onChange=>"javascript: this.form.apply_button_name.click();"}) %> 

    <!-- more select menus and text fields here --> 

    <div class="actions"> 
     <%= form.submit "Apply", :name => "apply_button_name", :remote => "true" %> 
    </div> 
<% end %> 

私が使用した「:リモート=> 『』真の両方のフォーム、ボタンのためにそれはAJAXが作業を取得するための唯一の方法ですので、私も試してみました。ここで

は、私のコードの関連抜粋ですし、明示的な「html_options」と「ジャバスクリプト:」なし。私はそれが助けにはならなかったことを示唆し、いくつかのSOの回答を閲覧した後、私はまたにonSelect、代わりのonChangeののonClick、まだ運を試してみました

が発生しました。 HTMLは次のとおりです。

Menu1 
    <select id="test_Menu1" name="test[Menu1]"><option value="value1">Option1</option> 
<option value="value2" selected="selected">Option2</option></select> 

ご覧のとおり、HTMLコードにはonChangeイベントハンドラはありません。どうして?誰が私が間違って何を見ている?

ありがとうございました。

答えて

14

このように、form.selectにお電話を変更します。

<%= form.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, 
       :onChange=>"javascript: this.form.apply_button_name.click();" %> 
+0

ありがとうrabusmar、とのonchange使用しようが、私はオプション1を選択すると、コントローラは値2を取得し、その逆。私は3番目のオプションを追加しました、そして、それはコントローラが私がちょうど選択したオプションではなく、前のものを取得するようです!なぜこれをやっているのですか?私はputs "@ test.Menu1 =" + @ test.Menu1.to_s + "\ n"をコントローラに追加することでこれをチェックしました。 – rh4games

+0

フォームの送信時に値が設定されていないためです。ハンドラで 'setTimeout'を使って正しい値を送ることができます。 – rabusmar

+0

インラインJavaScriptではなく、このファイルの外にあるJavaScriptを参照する方法を尋ねることはできますか? – Orz

3

をあなたのためにドキュメントを調べる場合:

API Dock Ruby on Rails select

選択したフォームヘルパーは、フォームを取ることが表示されます:

select(オブジェクト、メソッド、選択肢、オプション= {}、html_options = {})

オプションのハッシュに何も渡さないと(この場合は空のハッシュになります)、フォームはhtml_optionsハッシュがオプションのハッシュであると考えて混乱します。

これを確認する方法は、{:onchange => "alert( 'Hello');"}のようなものを追加して、イベントが正常にトリガされるか、実際のウェブページで選択要素を選択して検査します。 onchangeオプションがhtmlに存在しない場合は、あなたのrailsフォームヘルパーが実際にhtml_optionsを他のオプションと混同していることを意味します。だから、あなたが持っているべきか:

<%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], {}, {:onChange=>"handler();"} %> 

は、HTMLオプションの前にオプションについては、EMPTY HASHを含めることを確認し、あなたは問題ないはずです。私は、あなたが持っているhtml_optionsとjavascriptを持っている必要はないと思う。

最後のonChangeが動作しない場合は、助けなし資本C.

+0

それは動作しません。 – Aravin