在更改选择框期间调用JavaScript函数

在更改选择框期间调用JavaScript函数,javascript,ruby-on-rails,Javascript,Ruby On Rails,在我看来,我有以下几点: <%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true, :onchange => "alert_me_test()" }) %> true,:onchange=>“alert\u me\u test()”})%> 警报\u me\u test()是: 功能警报\u me\u测试() { 警报(“这是一个测试”) } 下拉列表看起来不错

在我看来,我有以下几点:

<%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true, :onchange => "alert_me_test()" }) %>
true,:onchange=>“alert\u me\u test()”})%>
警报\u me\u test()是:


功能警报\u me\u测试()
{
警报(“这是一个测试”)
}
下拉列表看起来不错,但当我从中选择时,什么也没有发生。我期待一个警告框,里面有“这是一个测试”

编辑案例: 当我进行编辑时,我有以下代码:

<% if @panel.event_id %>
  <%= select("panel", :event_id, events_ids_titles_hash, {:selected => @panel.event_id}, { :include_blank => true}) %>

@panel.event_id},{:include_blank=>true})%>
我的IDE(RubyMine)不想接受“onchange”作为附加参数,将其放入:selected或:include_空白参数散列中不会产生错误,但也不起作用

最终对“新建”和“编辑”都有效的内容:

@panel.event\u id},{:include\u blank=>true,:onchange=>“alert\u me\u test()”})%>
true},{:onchange=>“alert\u me\u test()”})%>

我认为您需要将
:onchange
设置为HtmlOption,这是第四个参数:

<%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true}, {:onchange => "alert_me_test()" }) %>
true},{:onchange=>“alert\u me\u test()”})%>
true,:onchange=>“alert\u me\u test()”})%>
为我工作,但我必须说,你是在用这个来对抗潮流。Rails遵循UJS,这意味着偶数处理程序应该与HTML分开。在这种情况下,select将是相同的减去onclick,然后脚本将是相同的

<script type="text/javascript">
  $('select').change(alert_me_test);

  function alert_me_test(){
  ...
  }
</script>

$('select')。更改(警报测试);
功能警报\u me\u测试(){
...
}

您不必这样做,但在查看事件调用来自何处的脚本时,它会更加清晰。

这很有效。我仍然没有弄清楚编辑部分的语法。请看上面编辑的问题。它对我很有用。编辑也起了作用:@panel.event_id},{:include_blank=>true,:onchange=>“alert_me_test()”})%>有一个问题:该警报被调用了两次。有什么想法吗?我假设您在脚本中使用了事件处理。在这种情况下,您可以从:html散列中删除:onchange=>“alert\u me\u test()”。在我的例子中,无论是否编辑,我都必须调用该函数(实际函数不是警报,而是对控制器的Ajax调用)。这意味着我不能在这里使用更为elegent的UJS语法(虽然我可能遗漏了一些东西,但我会在空闲时更多地阅读UJS)
<%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true}, {:onchange => "alert_me_test()" }) %>
<%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true, :onchange => "alert_me_test()" }) %>
<script type="text/javascript">
  $('select').change(alert_me_test);

  function alert_me_test(){
  ...
  }
</script>