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

Rails渲染partial后原绑定的jQuery click点击事件无响应问题

问题原因

这一现象和$(document).ready()的运行机制没有关系,属于jQuery事件绑定的常见问题:

  • 你初始使用$('#business_costs_nav_item').click(function(){...})写法时,是给页面首次加载完成后、已经存在的对应DOM节点直接绑定了点击事件
  • 后续执行$('#stages-nav').html(...)替换导航内容时,原本绑定了事件的旧DOM节点被整体移除,新渲染出来的节点哪怕ID、结构和旧节点完全一致,也是全新的DOM对象,没有绑定过对应的点击事件,因此原有逻辑不生效

解决方案

无需重复加载JavaScript代码,也不用每次渲染完导航后重新绑定事件,改用jQuery事件委托写法即可:
将application.js中的绑定逻辑修改为委托给始终不会被删除的父级元素#stages-nav:

$(document).ready(function() {
  // BUSINESS COSTS 事件委托写法
  $('#stages-nav').on('click', '#business_costs_nav_item', function() {
    slide_current_to_new('business_costs')
  })
  // 其他导航项绑定可以复用同一逻辑,示例:
  // $('#stages-nav').on('click', '#wedding_costs_nav_items', function() {
  //   slide_current_to_new('wedding_costs')
  // })
});

事件委托依赖浏览器的事件冒泡机制:子元素的点击事件会向上传递到父元素,jQuery会自动校验触发事件的元素是否匹配你指定的目标选择器,匹配就会执行对应的回调逻辑。这种写法对初始加载、后续动态渲染的元素都能生效。

内容的提问来源于stack exchange,提问作者J. Naylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:39:01