在Ruby on Rails表单中选择onChange

问题描述:

我浏览了所有关于此主题的问题和答案,但仍无法使我的方案正常工作。 我想在选择下拉菜单选项时触发点击按钮操作;看起来很简单,应该在AJAX中很常见。在Ruby on Rails表单中选择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”和“javascript:”,在我浏览了一些SO的答案后,提示但没有帮助,我也试过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> 

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

感谢您的任何帮助。

修改您的来电form.select,像这样:

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

感谢rabusmar,这有助于使用平变化,但是当我选择选项1,控制器获取值2,反之亦然。我添加了第三个选项,看起来控制器没有选择我刚刚选择的选项,而是之前的选项!它为什么这样做?我通过向控制器添加了“@ test.Menu1 =”+ @ test.Menu1.to_s +“\ n”来检查这一点。 – rh4games 2011-12-31 22:28:30

+0

这是因为表单发送时未设置值。你可以在你的处理程序中使用'setTimeout',以便发送正确的值。 – rabusmar 2012-01-01 03:28:52

+0

我可以问,如何引用此文件外的JavaScript,而不是内联JavaScript? – Orz 2015-07-24 03:45:31

如果您检查文档:

API Dock Ruby on Rails select

你会看到,选择表单辅助采取以下形式:

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

如果你没有通过任何选项散列(在你的情况下这将是一个空的散列),表单认为你的html_options散列是你的选项散列,并且会感到困惑。

一种检查方法是添加类似{:onchange =>“alert('Hello');”},并查看事件是否成功触发,或者在您的实际网页中右键单击选择元素并检查它。如果html中没有onchange选项,那意味着你的rails形式助手的确将html_options与其他选项混淆了。所以,你应该拥有的一切:

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

确保包括为options空哈希HTML选项之前,您应该罚款。我不认为你甚至需要有html_options和JavaScript的东西。

最后,如果的onChange不工作,尝试与没有资本C.

+0

它不工作。 – Aravin 2017-09-22 07:31:58