$(".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
答案 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添加评论,但我不能。
不支持链接方法。例如,$(“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中的元素上使用它。