2011-12-31 22 views
8

Bu konuyla ilgili tüm SO sorularına ve yanıtlarına göz attım ancak hala senaryolarımı gerçekleştiremiyorum. Bir açılır menü seçeneği seçildiğinde bir tıklama düğmesi eylemini tetiklemek istiyorum; basit görünüyor ve AJAX ile çok yaygın olmalı.select ve onChange Ruby on Rails formunu doldurun

<%= 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 %> 
kullandığım

. ":: Uzak => 'true' hem form ve o AJAX çalışma almak için tek yol olduğu için düğme için ben de denedim İşte

benim kod ilgili alıntılar vardır Açıkça "html_options" ve "javascript:" olmaksızın, bazı SO cevablarına göz attıktan sonra bunu önerdim ama yardımcı olmadı. Ayrıca denedim.Select ve onClick yerine onClick, ama yine de şans yok

HTML şöyledir:

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

Gördüğünüz gibi HTML kodunda onChange olay işleyicisi yok; NİYE YA? Neyi yanlış yaptığımı gören var mı?

Yardımlarınız için teşekkür ederiz.

cevap

14

böyle, form.select için çağrı değiştirin:

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

Teşekkür rabusmar ile Onchange kullanmayı deneyin, ama OPTION1 seçtiğinizde, kontrolör değer2 alır ve tersi. Bir üçüncü seçenek ekledim ve kontrolörün daha önce seçtiğim seçenek değil, daha öncekini seçtiği görülüyor! Bunu neden yapıyor? Denetleyiciye "@ test.Menu1 =" + @ test.Menu1.to_s + "\ n" koyar. – rh4games

+0

Çünkü form gönderildiğinde değer ayarlanmadı. İşleyicinizde 'setTimeout' öğesini kullanarak doğru değeri gönderebilirsiniz. – rabusmar

+0

Satır içi JavaScript yerine bu dosyanın dışındaki bir JavaScript'e nasıl başvurabilirim? – Orz

3

sen belgelerine incelerseniz: Sen form seç yardımcı biçimini alır göreceksiniz

API Dock Ruby on Rails select

:

select (nesne, yöntem, seçenekler, seçenekler = {}, html_options = {})

Eğer hash seçeneği için herhangi bir şey iletmezseniz (sizin durumunuzda bu boş bir karışma olacaktır), form, html_options karma değerinin seçenek karma olduğunu ve kafanızın karıştığını düşünür.

Bunu denetlemenin bir yolu, {: onchange => "alert (" Hello ");"} gibi bir şey eklemektir ve ya olayın başarılı bir şekilde tetiklenip tetiklenmediğini veya alternatif olarak gerçek web sayfanızda olup olmadığına bakın. Seçici eleman ve kontrol edin. Html'de herhangi bir değişiklik seçeneği yoksa, bu, raylarınızın yardımcısı oluşturduğu anlamına gelir, gerçekten html_options öğesini diğer seçeneklerle karıştırır. Yani, ne olmalıdır:

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

HTML SEÇENEKLERİ ÖNCE OPSİYONLARINA BOŞ HASH eklemeyi unutmayın VE İNCE OLMALI. Sahip olduğun html_options ve javascript öğelerine sahip olman gerektiğini bile sanmıyorum.

Son olarak onChange çalışmıyorsa, yardım hiç sermaye C.

+0

Çalışmıyor. – Aravin