0

我从 node.js 服务器获取一些数据,这些数据会影响我的一些元素的类。

$.get('/example', function (data)
{
//changes element 1 to .newclass from .oldclass
});

不幸的是,get 请求之外的事件处理程序无法识别更新的类。

$('.oldclass').click(function ()
{
//affects both element 1 and 2
});

如果我将 click 事件处理程序嵌套在 get 中,则问题不再存在。我怀疑这与异步请求有关,但我不完全确定。有人可以向我解释为什么会发生这种情况以及如何在不将我的代码嵌套在每个获取请求中的情况下解决它吗?

4

1 回答 1

4

您应该使用事件委托:

$('body').on('click', '.oldclass', function() { /* whatever */ });

通过这样做,您可以使用“oldclass”捕获元素上的事件,而不管 DOM 的动态更新如何。使用您的代码,您会在代码运行的那一刻找到带有“oldclass”的元素。如果元素随后发生变化,这些事件处理程序不会消失。

不必将委托事件处理程序挂在 body 元素上,但这是最简单的事情。一般来说,它可以是任何合适的父元素,它会处理匹配后代的事件。

于 2013-04-23T16:18:15.560 回答