我从 node.js 服务器获取一些数据,这些数据会影响我的一些元素的类。
$.get('/example', function (data)
{
//changes element 1 to .newclass from .oldclass
});
不幸的是,get 请求之外的事件处理程序无法识别更新的类。
$('.oldclass').click(function ()
{
//affects both element 1 and 2
});
如果我将单击事件处理程序嵌套在 get 中,问题就不再存在。我怀疑这与异步请求有关,但我不完全确定。有人可以向我解释为什么会发生这种情况以及如何解决它而不将我的代码嵌套在每个 get 请求中吗?
最佳答案
您应该使用事件委托(delegate):
$('body').on('click', '.oldclass', function() { /* whatever */ });
通过这样做,您可以捕获具有“oldclass”的元素上的事件,而不管 DOM 的动态更新如何。在您的代码中,您在代码运行的瞬间发现了带有“oldclass”的元素。如果元素随后发生更改,这些事件处理程序不会消失。
没有必要将委托(delegate)事件处理程序卡在 body 元素上,但这是最简单的事情。一般来说,它可以是任何适当的父元素,并且它将处理匹配后代的事件。
关于javascript - jQuery 无法识别 .get 请求中的类更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174327/