Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有.parent()和动态选择器的jQuery.on()_Javascript_Jquery - Fatal编程技术网

Javascript 带有.parent()和动态选择器的jQuery.on()

Javascript 带有.parent()和动态选择器的jQuery.on(),javascript,jquery,Javascript,Jquery,我想让上面的东西像.live()一样工作,这样它就可以捕获DOM的动态变化 我试过这样的东西 $(".hovertip").parent().on('hover', function() { alert('yay'); }); 但它似乎不起作用 注意–这是addresessed.on()与.parent()的延续,但动态DOM更改问题没有得到解决 更新: 谢谢你的建议 在对函数执行操作时,我仍然无法让这些代码实时工作,并且当DOM更改时,它们的工作方式与.live类似。例如(这在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');
});