jQuery Live遍历parent()选择器

时间:2012-10-17 00:06:32

标签: javascript jquery

$(".hovertip").parent().live('hover', function() {
  ...

以上代码似乎没有注册。

这似乎也不起作用:

$(".hovertip").parent().live({
  mouseenter:
    function() {
    ...

.live,.delegate,.bind或.on的任何示例使用jQuery选择器和带有.hover()或mouseenter的.parent()选择器:和mouseleave:?


更新:我已经创建了一个单独的问题来解决此问题提出的动态DOM问题:jQuery .on() with a .parent() and dynamic selector

4 个答案:

答案 0 :(得分:4)

尝试:

$(".hovertip").parent().on('hover', function() {
    alert('yay');
});

注意: .on是在jQuery 1.8中引入的。

工作演示 http://jsfiddle.net/pRB8n/ 将鼠标悬停在测试测试上 - 在演示中

如果你真的想使用.delegate请试试这个:http://jsfiddle.net/TURBX/2/ - http://api.jquery.com/delegate/

  

代表
  将处理程序附加到与之匹配的所有元素的一个或多个事件   选择器,现在或将来,基于一组特定的根   元件。

希望休息符合需要:)

P.S。 - .live已被弃用:如果你热衷的话,请进一步说明 - 我的旧帖子::) What's wrong with the jQuery live method?

在类别下,您会看到:http://api.jquery.com/live/“已弃用”

答案 1 :(得分:1)

我认为你所寻找的东西实际上是这样的:

$(document).on('mouseover', '.hovertip', function() {
  // handle your mouseover changes, here
});

$(document).on('mouseout', '.hovertip', function() {
  // handle your mouseout changes, here
});

.live,.bind,都被弃用,AFAIK,这意味着他们将来会离开,你可能不想依赖他们的持续支持。

用更接近你的.hovertip元素的选择器替换$(document)也好得多,但在DOM嵌套中高于它们,这样他们就可以响应你的事件,但不强迫jQuery监视整个文档中每个元素的每个事件。我只是将文档放在那里作为一个例子,因为我不知道你的结构的其余部分是什么样的。

http://jsfiddle.net/mori57/qa7py/

在我考虑它时,我认为值得指出的是,将内容扔到.parent()可能并不总是按照您期望的方式运行,特别是如果您正在修改DOM。我认为设置更高级别的事件处理程序要安全得多。

如果你必须使用.parent()这样的东西,我总是用.closest()找到更准确的结果,给它一个选择器也有助于解析引擎缩小搜索范围。您不希望父母一次触发/ all / .hovertips的悬停状态,这在某些情况下可能会发生。

答案 2 :(得分:1)

我会在Tats_innit's post添加评论,但我不能。

根据documentation on live

  

不支持链接方法。例如,$(“a”)。find(“。offsite,.external”)。live(...);无效,无法按预期工作。

这就是.parent()不起作用的原因。

答案 3 :(得分:1)

绑定到父

事件委托(由已弃用的live.delegate处理,现在由.on / .one处理)仅向下移动。你不能像你似乎想要在这里做一个向上的事件委托。

也就是说,如果".hovertip"的父级不存在,那么显然".hovertip"不存在,所以你实际上没有绑定任何东西。

如果您的目标是将事件绑定到".hovertip"的父级,那么您就是SOL,因为委托只会向下移动(到后代)。

您可以选择处理: *当它附加到DOM时绑定到.hovertip的父级。 *提前知道.hovertip父级的选择器并立即绑定,可能是通过委托。

委托给孩子

如果您的目标是在.hovertip悬停时触发事件,但.hovertip可能不在DOM中且其父级未知,则必须使用以下方法:

$("known parent selector of .hovertip").on('hover', '.hovertip', function () {

“.hovertip的已知父选择器”必须是您提前知道的元素。如果你不知道,你必须使用document,但我建议尽量接近。您只能在绑定时存在于DOM中的元素上使用它。