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

Rails7下form_with搭配Stimulus、Hotwire的select事件不生效问题

问题原因

两处写法错误导致事件绑定失效:

  • Rails的form.select辅助方法参数顺序有严格要求:参数依次为字段名、选项列表、Rails表单配置哈希、HTML属性哈希。你写的data事件配置被传到了第三个「Rails表单配置」的位置,根本没有被渲染成select标签的HTML属性,change事件自然无法触发。
  • 写了data-action="click->answer#my_method"的p标签,放在了声明data-controller="answer"的div容器外面,不在Stimulus控制器的作用域范围内,点击事件也不会被识别。
修复代码

修正select标签参数

给form.select的第三个参数传空哈希占位,把包含data配置的HTML属性放到第四个参数位置:

<%= form.select :type_answer,
  [["Multiple Choice", 1], ["Single choice", 2], ["Text-box", 3]],
  {}, # 该位置传Rails原生配置,比如默认选中值、空白选项等,无配置就传空哈希
  {data: { action: "change->answer#my_method" }}
%>

调整p标签位置

如果需要p标签的点击事件生效,把它移到answer控制器的容器div内部:

<div data-controller="answer">
  <div>
    <%= form.label :type_answer %>
    <%= form.select :type_answer, [["Multiple Choice", 1], ["Single choice", 2], ["Text-box", 3]], {}, {data: { action: "change->answer#my_method" }} %>
  </div>
  <p data-action="click->answer#my_method">Click me!!</p>
</div>
校验方法

修改完成后刷新页面,右键检查生成的select标签,能看到标签上存在data-action="change->answer#my_method"属性即为渲染正确。此时切换下拉选项、点击p标签,都能在浏览器控制台看到输出的Hello new World日志。

内容的提问来源于stack exchange,提问作者Jorge Ortíz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:12:18