Javascript 带有.parent()和动态选择器的jQuery.on()
我想让上面的东西像.live()一样工作,这样它就可以捕获DOM的动态变化 我试过这样的东西Javascript 带有.parent()和动态选择器的jQuery.on(),javascript,jquery,Javascript,Jquery,我想让上面的东西像.live()一样工作,这样它就可以捕获DOM的动态变化 我试过这样的东西 $(".hovertip").parent().on('hover', function() { alert('yay'); }); 但它似乎不起作用 注意–这是addresessed.on()与.parent()的延续,但动态DOM更改问题没有得到解决 更新: 谢谢你的建议 在对函数执行操作时,我仍然无法让这些代码实时工作,并且当DOM更改时,它们的工作方式与.live类似。例如(这在DOM更
$(".hovertip").parent().on('hover', function() {
alert('yay');
});
但它似乎不起作用
注意–这是addresessed.on()与.parent()的延续,但动态DOM更改问题没有得到解决
更新: 谢谢你的建议 在对函数执行操作时,我仍然无法让这些代码实时工作,并且当DOM更改时,它们的工作方式与.live类似。例如(这在DOM更改时不起作用) 我认为问题在于,如果我要实现一个建议的解决方案,我仍然需要在主选择器之前使用$(this).parent()作为回调,而它似乎不是。parent()支持回调: 例如:
$(".hovertip").parent().on('mouseenter', function() {
var hovertipParentHeight = $(this).outerHeight();
$(this).find(".hovertip").css("top", (hovertipParentHeight-hovertipHeight)/2 + "px");
}))
不起作用。(以及更大的.live())通过侦听来自其子代的冒泡事件来工作。您可以愉快地添加/删除子元素,因为您知道父元素仍在侦听
记住这一点,将.on()绑定到不会更改的父元素。您可以将其绑定到文档
$('.hovertip').on('hover', function(){
$(this).parent(function() {
var hovertipParentHeight = $(this).outerHeight();
$(this).find(".hovertip").css("top", (hovertipParentHeight-hovertipHeight)/2 + "px");
...
您的错误是选择器(第2个)参数中的
此未引用.hovertip
如果要在.hovertip元素的每个父元素中捕获事件,可以按如下方式执行:
$(".highest-level-container").on('hover', '.hovertip', function() {
console.log($(this).parent());
});
如果父母都有相同的课程,你应该使用@Matt Stone的解决方案
更新:我刚在另一篇帖子上看到你的答案:
$(.hovertip”).parent().on('hover',function(){alert('yay');});正在工作,不幸的是,一旦页面通过AJAX刷新,它就会停止工作
这是因为当附加了事件处理程序的元素(在您的例子中是.hovertip元素的父元素)被替换时,它停止工作
我建议您为所有应该获得悬停事件处理程序的元素(所有.hovertip的父元素)提供一个类。那就容易了
例如:
$('body').on('hover','.hovertip',function(){}) 你看过文件了吗?是的,我看过文件了。显然,如果将接收器指定为第二个参数,则更改是动态的。但是,使用$(this.parent)它不起作用。你想达到什么目标?应该从哪个元素委派事件?谢谢Matt,我不想得到名为.parent的类,我想得到hovertip类的父元素。当然。概念仍然是,您应该将.on()绑定到最接近的父级,该父级将包含所有.hovertip元素。感谢Thomas,我希望将函数保留为常规函数,以便只查找.parent()元素。这是一个应用程序范围的函数。然后,您可以在每次进行AJAX调用时(重新)附加事件。
$(".highest-level-container").on('hover', '.hovertip', function() {
console.log($(this).parent());
});
$('.hovertip').parent().on('hover', '.hovertip', function(){
alert('yay');
});