You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails ERB中将对象变量传递给JS onclick函数?

问题分析与解决方法

先拆解你之前四种写法的问题:

  • 写法1:onclick="fun(a,b,c)"
    这里的a、b、c是JavaScript上下文的变量,但页面里根本没在JS中定义这些变量,浏览器找不到对应值,要么报错要么拿不到正确内容。
  • 写法2:onclick="fun('a,b,c')"
    直接传递了固定字符串'a,b,c',完全不是你要的对象,自然会变成字符串类型。
  • 写法3:onclick="fun(\'' + a + '\', \'' + b + '\', \'' + c + '\')"
    JS里未定义a、b、c变量,就算定义了,对象直接转字符串只会得到[object Object],完全丢失对象内的数据。
  • 写法4:onclick="fun(\'' + <%= a %> + '\', \'' + <%= b %> + '\', \'' + <%= c %> + '\')"
    ERB输出的是Ruby对象的字符串形式(比如Ruby哈希会输出{:name=>"test"}),这种格式JS无法识别,拼入代码后直接触发「Invalid or Unexpected token」语法错误。

正确解决方式

因为a、b、c是Ruby对象,要传给JS函数,必须先转成JS能识别的对象格式——JSON。

方法一:直接在onclick中传递解析后的对象

用Ruby的to_json方法把对象转成JSON字符串,再用raw避免ERB自动转义引号,渲染后就是合法的JS对象字面量:

<input type="checkbox" id="group_box" onclick="fun(<%= raw a.to_json %>, <%= raw b.to_json %>, <%= raw c.to_json %>);"/>

方法二:先定义JS变量再调用(更清晰,推荐)

先在script标签里把Ruby对象转成JS变量,再在onclick中使用这些变量:

<script type="text/javascript">
  // 将Ruby对象转换为JS可识别的对象
  const jsA = <%= raw a.to_json %>;
  const jsB = <%= raw b.to_json %>;
  const jsC = <%= raw c.to_json %>;

  function fun(a,b,c){
    console.log(a);
    console.log(b);
    console.log(c);
  }
</script>

<input type="checkbox" id="group_box" onclick="fun(jsA, jsB, jsC);"/>

内容的提问来源于stack exchange,提问作者Surbhi Goel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:20:35