如何在Rails中为select标签添加onchange事件

21

如何在此处添加onchange事件?

框架:rails
数据库:MySQL

我正在从数据库中填充选项,这使得我使用了options_from_collection_for_select

select_tag(:variable,options_from_collection_for_select(:all, :id, :name))
4个回答

30

select_tag函数的最后一个参数是一个options哈希,您可以在其中添加任何选择器的HTML属性。因此,要添加onchange属性:

select_tag :variable, options_from_collection_for_select(:all, :id, :name), onchange: 'yourOnChangeHandler()'

1
我能否在控制器中指定一个onchange事件作为一个操作?如果不能,那么我该怎么做呢? - Nave
1
我不太确定你的意思是什么? - Daniel Vandersluis
我在我的控制器中有一个需要执行的操作,而不是JavaScript事件处理程序。我能否使用onchange事件来执行它,或者还有其他方法吗? - Nave
2
DOM 事件只能触发 JavaScript 事件处理程序。但你可以让事件处理程序发起一个 AJAX 调用到你想执行的操作。 - Daniel Vandersluis
我当然不知道你想做什么,但是看一下observe_field方法(http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001622)吧--你可以使用它来设置一个Rails动作,以代替上面的onchange处理程序,在输入更改时调用。希望这能让你朝着正确的方向前进! - Daniel Vandersluis
无效!!!这是我的代码 <% tax = options_from_collection_for_select(@taxes, 'rate', 'name'), :onchange => 'calcInvoiceTotal()' %> - Aravin

8

尝试类似以下内容:

:onchange => remote_function(:url => {:controller => 'controller', :action => 'action'})

2
这仅适用于原型助手,该助手已从Rails 3.0.9中排除。http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/remote_function - damoiser

7
对于select_tag,只需添加以下内容:
{:onchange => "myHandler();" }

另外,如果 onchange 无法正常工作,请尝试大写字母 C 的 onChange
最后,请确保不要混淆 select_tag 和表单选择。
请查看我对类似问题的答案,只是关于表单选择而不是 select_tag在表单选择中添加 onchange 事件

0

您可能想要在内联中添加一个 onchange 属性:

select_tag(:variable,options_from_collection_for_select(:all, :id, :name)), {:onchange => "(function(e){ e.target.value }).apply(this,arguments)"}

对于我的情况,我不确定在哪里放置命名函数,有时我觉得创建一个函数只是为了创建一个简单的标记很繁琐。因此,人们倾向于编写内联函数。
但是像 {onchange: "e.target.value"} 这样的简单行不起作用,因为没有定义变量(例如 event)。
解决方案是接受参数的自执行函数。

你能多提供一些细节吗?或者解释一下为什么这会有帮助。 - Karl Wilbur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接