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

Rails:在Rails视图中使用javascript函数的正确语法,javascript,ruby-on-rails,syntax,views,Javascript,Ruby On Rails,Syntax,Views,我试图在表单中使用一些javascript从选择下拉框中获取值,并将其用于表单的另一部分。我搞不懂语法 首先是javascript函数(我把它放在视图的末尾): 然后,我选择的下拉项显示在表单上(尽管我也看到return\u event\u id这个词) 如果我这样做: <% selected_event_id = return_event_id %> 我收到以下错误消息:未定义的局部变量或方法“return\u event\u id” 我想要的是能够将event_id值存

我试图在表单中使用一些javascript从选择下拉框中获取值,并将其用于表单的另一部分。我搞不懂语法

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

然后,我选择的下拉项显示在表单上(尽管我也看到return\u event\u id这个词)

如果我这样做:

<% selected_event_id =  return_event_id %> 

我收到以下错误消息:未定义的局部变量或方法“return\u event\u id”

我想要的是能够将event_id值存储在一个变量中。正确的语法是什么

关于答复的其他详细信息和意见: 1:是的,Ruby代码=服务器,javascript代码=客户端

2:将代码放入类似application.js的东西中会将其移出view.erb模块,但据我所知,它不会改变结果


我明白这是行不通的,但我确实需要达到这样一个程度:我可以以某种方式将return\u event\u id的输出传递回服务器,然后将其捕获到Ruby变量中,或者,如果有办法使用javascript函数输出在表单中设置另一个元素。

对于初学者,最好将javascript与视图分开:

将js写在一个单独的文件中,根据rails的版本将其放在public或assets dir中。。 然后,如果您在raila 3.1+中,它将自动加载您的资产,如果低于3.1,请将以下内容添加到视图(顶部)


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



我建议使用上述URL中的getJSON方法作为初学者,最好将javascript与视图分开:

将js写在一个单独的文件中,根据rails的版本将其放在public或assets dir中。。 然后,如果您在raila 3.1+中,它将自动加载您的资产,如果低于3.1,请将以下内容添加到视图(顶部)


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



我建议使用上述URL中的getJSON方法来调用JavaScript函数,您有两个选项:

1) 直截了当地说:

让select_标记生成一个html属性“onchange”

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


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

要调用JavaScript函数,有两个选项:

1) 直截了当地说:

让select_标记生成一个html属性“onchange”

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



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

您试图从ruby语句(在客户端知道有响应之前在服务器上运行)调用javascript函数(在浏览器上运行)?世界上没有任何语法可以解决这个问题。所选的\u事件\u id是什么?是文本框(html)还是服务器端的某个东西?您试图从ruby语句(在客户端知道有响应之前在服务器上运行)调用javascript函数(在浏览器上运行)?世界上没有任何语法可以解决这个问题。所选的\u事件\u id是文本框(html)还是服务器端的某个东西?这将允许您从ruby调用javascript函数?您不能从ruby调用js函数。Ruby在服务器上运行,js在客户端运行。您可以通过ajax调用将信息发送回服务器。是的,您可以。也许不是一个没有解决问题的答案,你会考虑写一些东西来解释OP的错误并解决问题。请看我的问题的编辑。除了将函数移动到另一个文件之外,这个问题没有得到解决。如果可以通过Ajax调用将其传回服务器,我将非常感谢一个指针/示例。这将允许您从ruby调用javascript函数?您不能从ruby调用js函数。Ruby在服务器上运行,js在客户端运行。您可以通过ajax调用将信息发送回服务器。是的,您可以。也许不是一个没有解决问题的答案,你会考虑写一些东西来解释OP的错误并解决问题。请看我的问题的编辑。除了将函数移动到另一个文件之外,这个问题没有得到解决。如果可以通过Ajax调用将其传递回服务器,我将非常感谢一个指针/示例。我知道onchange语法,但我弄乱了getElementById语法(将其设置为一个值)。正确的方法应该是这样的:document.getElementById(“old_event_id”).value=return_event_id,我已经提交了一个不完整的答案谢谢。我知道onchange语法,但我把get搞乱了
<%= select("discount_code", :event_id, events_ids_titles_hash, { :include_blank => true }) %>
return_event_id
<% selected_event_id =  return_event_id %> 
<%= javascript_include_tag "my_javascript_filename" %>
select("discount_code", :event_id, events_ids_titles_hash, { 
    :include_blank => true, 
    :onchange => "fill_my_event_data();"
    }