Jquery 在ruby代码中使用javascript变量

Jquery 在ruby代码中使用javascript变量,jquery,ruby-on-rails,Jquery,Ruby On Rails,以我的红宝石形式 $('#some_id').change(function(){ var value = $(this).val(); var index = $(this).attr('id').to_i; $('option_value_0').html('<%= escape_javascript render partial: 'color_form', locals: { f: f, index: index, id: value } %>')

以我的红宝石形式

$('#some_id').change(function(){
    var value = $(this).val();
    var index = $(this).attr('id').to_i;

    $('option_value_0').html('<%= escape_javascript render partial: 'color_form', locals: { f: f, index: index, id: value } %>')
})
$('some#u id')。更改(函数(){
var值=$(this.val();
var index=$(this.attr('id')。to_i;
$('option\u value\u 0').html(“”)
})
这是javascript部分。它抛出了一个错误,因为

未定义的方法索引和值


我怎样才能解决这个问题?提前谢谢

不能使用JavaScript在HTML页面中注入ruby代码。在将生成的HTML页面发送到浏览器之前,ERB模板在服务器上进行处理。浏览器加载页面后,您可以查看页面的源代码,但不会看到任何
标记,因为它们已由服务器呈现

一旦页面已经在浏览器中,JavaScript就会向页面添加ruby代码,但浏览器不会理解ruby


您可能需要研究支持部分(或模板)的JavaScript框架,例如。

您不能使用JavaScript在HTML页面中插入ruby代码。在将生成的HTML页面发送到浏览器之前,ERB模板在服务器上进行处理。浏览器加载页面后,您可以查看页面的源代码,但不会看到任何
标记,因为它们已由服务器呈现

一旦页面已经在浏览器中,JavaScript就会向页面添加ruby代码,但浏览器不会理解ruby


您可能需要研究一个支持部分(或模板)的JavaScript框架,例如。

Ce-ne-pas-mable,mon-ami


正如评论中提到的,Ruby是服务器;javascript是客户端。这意味着两件事之一:

  • 在运行时生成javascript(不推荐)
  • 将ajax/javascript值发送到服务器(通过ajax)
要使其正常工作,您需要通过ajax发送请求:

#app/assets/javascripts/application.js
$(document).on("change", "#some_id", function(e) {
   $.get("forms/update", {index: $(this).val(), value: $(this).attr('id').to_i});
});
这需要通过适当的路线和管制员行动来解决:

#config/routes.rb
get "color_form", to: "application#color_form"

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   respond_to :js, :html

   def color_form
     @id    = params[:id]
     @value = params[:value]
   end
end

#app/views/application/color_form.js.erb
$('option_value_0').html('<%=j render partial: 'color_form', locals: { index: @index, id: @value } %>')

不可能,我的朋友


正如评论中提到的,Ruby是服务器;javascript是客户端。这意味着两件事之一:

  • 在运行时生成javascript(不推荐)
  • 将ajax/javascript值发送到服务器(通过ajax)
要使其正常工作,您需要通过ajax发送请求:

#app/assets/javascripts/application.js
$(document).on("change", "#some_id", function(e) {
   $.get("forms/update", {index: $(this).val(), value: $(this).attr('id').to_i});
});
这需要通过适当的路线和管制员行动来解决:

#config/routes.rb
get "color_form", to: "application#color_form"

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   respond_to :js, :html

   def color_form
     @id    = params[:id]
     @value = params[:value]
   end
end

#app/views/application/color_form.js.erb
$('option_value_0').html('<%=j render partial: 'color_form', locals: { index: @index, id: @value } %>')

Ruby在服务器上运行,JS在客户机上运行,因此两者不能直接交互。为了满足您的需要,您需要使用AJAX将JS变量发送到服务器。Ruby在服务器上运行,JS在客户机上运行,因此两者不能直接交互。为了满足您的需求,您需要使用AJAX将JS变量发送到服务器。感谢您的简要描述。真是太好了!您能描述一下关于预加载
颜色表单的一些信息吗?谢谢再说一遍。你说的“预加载”是什么意思?
你写的,如果你想要快捷方式,你可以预加载颜色表单部分,然后使用javascript功能更改id或值参数。
。那么我该怎么做呢?哦,对不起,让我给你写一封感谢你的简短描述。真是太好了!您能描述一下关于预加载
颜色表单的一些信息吗?谢谢再说一遍。你说的“预加载”是什么意思?
你写的,如果你想要快捷方式,你可以预加载颜色表单部分,然后使用javascript功能更改id或值参数。
。那么我该怎么做呢?哦,对不起,让我给你写吧