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

上面的代码似乎没有注册。

这似乎也不起作用:

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

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


更新:我创建了一个单独的问题来解决这个问题提出的动态 DOM 问题: 带有 .parent() 和动态选择器的 jQuery .on()

4

4 回答 4

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/

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

希望休息满足需求:)

PS -.live已弃用:如果您愿意,可以进一步了解 - 我在这里的旧帖子::) jQuery live 方法有什么问题?

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

于 2012-10-17T00:17:08.903 回答
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 元素但在 DOM 嵌套中高于它们的选择器替换也会好得多$(document),因此它们可以响应您的事件,但不会强制 jQuery 监视整个元素上的每个事件文档。我只是将文档放在那里作为示例,因为我不知道您的结构的其余部分是什么样的。

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

考虑到这一点,我认为值得指出的是,将东西扔给 .parent() 可能并不总是按您期望的方式工作,尤其是在您修改 DOM 时。我认为设置更高级别的事件处理程序要安全得多。

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

于 2012-10-17T00:21:21.100 回答
1

我会在Tats_innit 的帖子中添加评论,但我不能。

根据live 上的文档

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

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

于 2012-10-17T00:22:27.937 回答
1

绑定到父级

事件委托(由已弃用的liveand处理.delegate,现在由.on/处理.one)只会向下移动。您不能像您在这里似乎想做的那样进行向上的事件委托。

也就是说,如果父级".hovertip"不存在,那么显然".hovertip"不存在,所以你实际上没有任何约束力。

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

.hovertip处理该问题的选项是: *当它附加到 DOM 时绑定到父级。.hovertip*提前知道父级的选择器并立即绑定到它,也许通过委托。

委托给孩子

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

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

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

于 2012-10-17T00:24:35.243 回答