在我的网络应用程序中,我有一个在加载时出现的 15 个项目的无序列表。我正在使用 ajax 从 API 中获取 100 个新项目,并ul
使用.append(html)
. 每个li
旁边都有一个复选框,选中时需要调用some_function
.
已渲染的元素可以访问some_function
,但不能访问新加载的元素。如何访问some_function
新加载的 ajax 项目?我以前从未处理过这个问题,显然是因为这些项目没有“渲染”但它们无法访问功能?
在我的网络应用程序中,我有一个在加载时出现的 15 个项目的无序列表。我正在使用 ajax 从 API 中获取 100 个新项目,并ul
使用.append(html)
. 每个li
旁边都有一个复选框,选中时需要调用some_function
.
已渲染的元素可以访问some_function
,但不能访问新加载的元素。如何访问some_function
新加载的 ajax 项目?我以前从未处理过这个问题,显然是因为这些项目没有“渲染”但它们无法访问功能?
这是一个很好的情况,您可以使用 jQueryon()
函数
你可以在这里阅读更多关于它的信息
对于这种情况,您应该使用事件委托。基本上,您将处理程序绑定到父元素并通过选择器过滤掉以触发处理程序。
下面是伪代码,
$('ul').on('click', '.checkbox', function () {
some_function.call(this); //maintain the context if it is an external function.
});
你需要delegate the events.
如果 <div id="div1"></div>
是一个动态注入的元素,你想附加点击事件
$('staticContainer').on('click', '#div1', some_function);
在没有看到您的代码的情况下,我猜测您已将事件处理程序直接绑定到复选框
$('input[type="checkbox"]').click(function(event) {
// Your code
});
要使用在创建处理程序后添加的内容进行此操作,您需要使用委托处理程序,该处理程序绑定到较低级别的未更改元素并将事件冒泡到复选框。document
尽管建议将其绑定到更上方的 dom 节点,但我已经使用过,很可能ul
是复选框被添加到的地方。
$(document).on('click', 'input[type="checkbox"]', function(event) {
// Your code
});