在Ruby on Rails表单中选择和onChange

rh4*_*mes 9 forms select onchange submit

我浏览了关于这个主题的所有SO问题和答案,但我仍然无法使我的场景工作.我想在选择下拉菜单选项时触发单击按钮操作; 看起来很简单,应该与AJAX非常相似.

以下是我的代码的相关摘录:

<%= 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 %>
Run Code Online (Sandbox Code Playgroud)

我使用":remote =>"true"对于表单和按钮都是如此,因为这是让AJAX正常工作的唯一方法.在浏览了一些SO答案之后,我也试过了没有明确的"html_options"和"javascript:"建议,但这没有帮助.我也试过onSelect,而onClick而不是onChange,但仍然没有运气.

生成的HTML如下:

    Menu1
    <select id="test_Menu1" name="test[Menu1]"><option value="value1">Option1</option>
<option value="value2" selected="selected">Option2</option></select>
Run Code Online (Sandbox Code Playgroud)

如您所见,HTML代码中没有onChange事件处理程序; 为什么?任何人都在看我做错了什么?

谢谢你的帮助.

rab*_*mar 16

将您的通话修改为form.select,如下所示:

<%= form.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, 
                :onChange=>"javascript: this.form.apply_button_name.click();" %>
Run Code Online (Sandbox Code Playgroud)


Ami*_*itF 8

如果您检查以下文档:

API Dock Ruby on Rails选择

您将看到select表单助手采用以下形式:

select(object,method,choices,options = {},html_options = {})

如果你没有为选项哈希传递任何东西(在你的情况下这将是一个空哈希),表单认为你的html_options哈希是你的选项哈希,并感到困惑.

检查这个的方法是添加类似{:onchange =>"alert('Hello');"}的内容,并查看事件是否成功触发,或者在实际网页中,右键单击select元素,检查它.如果html中没有onchange选项,那意味着你的rails表单助手确实让html_options与其他选项混淆.那么,你应该拥有什么:

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

在HTML选项之前确定包含选项的空白哈希并且您应该是精细的.我认为您甚至不需要拥有html_options和javascript的东西.

最后,如果onChange不起作用,请尝试使用onchange而不使用大写C.