我正在尝试在表单中使用一些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函数输出到在表单中设置另一个元素。
答案 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知识是有用的。