开发者问题收集

新插入的 HTML 无法通过 Rails Nested Form 的 JS 事件处理起作用

2014-04-16
198

我正在使用带有 Rails 4 的 nested_forms 以及 turbo-links + jQuery 插件使其在页面加载时重新启动。一旦我添加一个带有标记的嵌套字段,该字段应该会触发事件,它就会失败,似乎只有初始页面加载时的内容才能触发 js 事件。

示例:

$(document).ready(function(){
  $('.address_input_type').on('change', function(){
    showAppropriateAddressFields(this);
  })
});

因此,如果“.address_input_type”最初在页面上,则 function showAppropriateAddressFields 将触发,但如果之后添加,则会失败。有什么想法吗?

2个回答

由于元素是新插入的,您需要使用 事件委托

$(document).ready(function(){
  $(document).on('change', '.address_input_type', function(){
    showAppropriateAddressFields(this);
  })
});

尝试找到比 document 更近的父元素(例如容器 div)作为选择器,因为使用 document 效率不高。

dsgriffin
2014-04-16

如果您在页面加载时查询 DOM 中的某个类,您将返回一个类似数组的节点对象,当稍后添加具有该类的其他节点时,该节点不会自行更新。从头开始将其附加到页面并设置其样式“display: none”。

adrichman
2014-04-16