0

我正在尝试在表单中使用一些 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 模块,但据我所知,它不会改变结果。

我知道 <% selected_event_id = return_event_id %> 将不起作用,但我确实需要达到一个点,我可以以某种方式将 return_event_id 的输出传递回服务器,然后将其捕获到 Ruby 变量中,或者,如果有是一种使用 javascript 函数输出来设置表单中另一个元素的方法。

4

2 回答 2

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 方法

于 2012-07-16T12:19:44.793 回答
1

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

1)直截了当:

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

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

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

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

于 2012-07-16T13:02:42.300 回答