【问题标题】:Calling a JavaScript function during onchange of a select box在选择框的 onchange 期间调用 JavaScript 函数
【发布时间】:2012-07-18 14:32:27
【问题描述】:

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

<%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true, :onchange => "alert_me_test()" }) %>

alert_me_test() 是:

<script type="text/javascript">
  function alert_me_test()
  {
      alert ("this is a test")
  }
</script>

下拉列表看起来不错,但是当我从中选择时,什么也没有发生。我期待一个带有“这是一个测试”的警告框。

编辑案例:

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

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

我的 IDE (RubyMine) 不想接受“onchange”作为附加参数,将其放在 :selected 或 :include_blank 参数哈希之一中不会产生错误,但它也不起作用

什么最终对 new 和 edit 都有效:

<% if @panel.event_id %>
    <%= 'Event is ' + events_ids_titles_hash.key(@panel.event_id) %>
    <%= select("panel", :event_id, events_ids_titles_hash, {:selected => @panel.event_id}, { :include_blank => true, :onchange => "alert_me_test()"}) %>
<% else %>
    <%= 'Select Event from list' %>
    <%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true }, { :onchange => "alert_me_test()" }) %>
<% end %>

【问题讨论】:

    标签: javascript ruby-on-rails


    【解决方案1】:
    <%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true, :onchange => "alert_me_test()" }) %>
    

    为我工作,但我必须说你正在与这个对抗潮流。 Rails 遵循 UJS,这意味着您的偶数处理程序应该与您的 HTML 分开。在这种情况下,选择将是相同的减去 onclick,然后脚本将是

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

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

    【讨论】:

    • 它对我有用。编辑效果也很好: @panel.event_id}, { :include_blank => true, :onchange => "alert_me_test()"}) % > 有一个问题:警报被调用了两次。有什么想法吗?
    • 我假设您在脚本中使用了事件处理。在这种情况下,您可以从 :html 哈希中删除 :onchange=>"alert_me_test()" 。否则它们都会被触发。
    • 就我而言,无论我是否正在编辑,我都必须调用该函数(实际函数不是警报,而是对控制器的 Ajax 调用)。这意味着我不能在这里使用更优雅的 UJS 语法(虽然我可能会遗漏一些东西,但是当我有空时我会更多地阅读 UJS)
    【解决方案2】:

    我相信您需要将:onchange 设置为HtmlOption,这是第4 个参数:

    <%= select("event", :event_id, events_ids_titles_hash, { :include_blank => true}, {:onchange => "alert_me_test()" }) %>
    

    【讨论】:

    • 那行得通。我还没有弄清楚编辑部分的语法。请参阅上面编辑过的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多