Rails:在rails视图中使用javascript函数的正确语法

时间:2012-07-16 12:02:29

标签: javascript ruby-on-rails syntax views

我正在尝试在表单中使用一些javascript来从选择下拉框中获取值,并将其用于表单的另一部分。我无法弄清楚语法。

首先是javascript函数(我把它放在我视图的末尾):

<script type="text/javascript">
  function return_event_id()
  {
    var event_id = document.getElementById("event_id");
    return event_id.value;
  }
</script>

在视图中,我有以下内容:

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

如果我添加以下声明:

return_event_id

然后我选择的下拉项目显示在表单上(虽然我也看到了单词return_event_id)。

如果我这样做:

<% selected_event_id =  return_event_id %> 

我收到以下错误消息:未定义的局部变量或方法`return_event_id'

我正在寻找的是能够将event_id值存储在变量中。什么是正确的语法?

答案的其他详细信息和评论:

1:是的,Ruby代码=服务器,javascript代码=客户端

2:将代码放在像application.js这样的东西会把它移出view.erb模块,但据我所知,它不会改变结果。

我理解&lt;%selected_event_id = return_event_id%&gt;将无法工作,但我确实需要达到一个点,我可以以某种方式将return_event_id的输出传递回服务器,然后在Ruby变量中捕获它,或者,如果有办法使用javascript函数输出到在表单中设置另一个元素。

2 个答案:

答案 0 :(得分:4)

对于初学者,最好将javascript与您的观点分开:

将你的js写在一个单独的文件中,把它放在公共场所或你的资产目录中,具体取决于你的rails版本。 然后,如果您在raila 3.1+中,它将自动加载您的资产,如果低于3.1将以下内容添加到您的视图中(在顶部)

<%= javascript_include_tag "my_javascript_filename" %>

从那里你可以创建一个ajax请求回到你的rails应用程序(这意味着编写控制器代码和处理这个的路由)来获取你想要的项目列表:

http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/
我建议使用上面URL的getJSON方法

答案 1 :(得分:1)

要让您的JavaScript函数被调用,您有两个选择:

1)直截了当:

让select_tag生成一个html属性“onchange”

select("discount_code", :event_id, events_ids_titles_hash, { 
    :include_blank => true, 
    :onchange => "fill_my_event_data();"
    }

然后编写一个JavaScript函数“fill_my_event_data”,它使用你的return_event_id(),然后将你需要的数据放在你想要的表单元素中。

2)使用jQuery的“不显眼的JavaScript”。然后你不需要在rails中做很多事情(除了提供正确的id和数据属性)。您可以在底部的JavaScript部分中执行所有操作。将select标记与再次调用函数的事件处理程序连接起来。但是当然你需要学习jQuery的基础知识。如果你需要经常做这些事情,jQuery知识是有用的。