2014-10-20 73 views
0

我有一个奇怪的问题。我想.slideUp()点击后一些DIV的任何地方,但只有当鼠标未悬停特定的元素...

$("body").mousedown(function() { 
    if ($(".title").is(":hover") || $(".helper").is(":hover")) return; 
    $(".helpers").slideUp(); 
}); 
$(".title").mouseover(function() { 
    $(".helpers").slideDown(); 
}); 

此代码是(在http://siwego.net机顶页盘旋“dev_helpers”)为我工作很好,直到我不得不将第二个“.helper”元素添加到源代码中。在那之后,点击身体,JavaScript的转储以下错误:

Error: Syntax error, unrecognized expression: unsupported pseudo: hover 

我试图修改代码以实现循环要素:

$("body").mousedown(function() { 
     if ($(".title").is(":hover")) return; 
     $('.helper').each(function(i, obj) { 
      if ($(this).is(":hover")) return; 
     }); 
     $(".helpers").slideUp(); 
}); 
$(".title").mouseover(function() { 
    $(".helpers").slideDown(); 
}); 

错误没有显示了,但是:悬停检查“为每个'都不起作用(它不能防止slideUp())。

我不得不这样做:

$("body").mousedown(function() { 
    if ($(".title").is(":hover") || $(".helper1").is(":hover") || $(".helper2").is(":hover")) return; 
    $(".helpers").slideUp(); 
}); 
$(".title").mouseover(function() { 
    $(".helpers").slideDown(); 
}); 

但它不适合我的解决方案,因为我必须添加新的元素检查每个“.helperX”实例.....

也许有人将有任何线索...

+3

我没有看到您链接的站点中出现的任何类,'title','helper'或'helpers'。此外,请避免链接到外部网站,但使用代码片段最小限度地重现您的问题或在[JSfiddle](http://jsfiddle.net)上执行。 – Terry 2014-10-20 19:33:32

+1

您的'.each()'循环不会执行任何操作。它测试元素是否被徘徊,但根据其结果而不做任何事情。该函数只是返回,然后转到循环中的下一个元素。 – Barmar 2014-10-20 19:39:09

回答

1

正如提到的:hover pseudoselector似乎有一些问题,但它在我使用jQuery边缘Chrome上工作。

你并不需要使用您的.each()循环(你好像不明白怎么作用域的工作。return.each()内范围的,它不returnmousedown的)。无论如何,你可以做这样的事情:

if ($(".title").is(":hover") || $(".helper:hover").length) return; 

你可以看到它在这里工作:http://jsfiddle.net/4x661tt6/。但是,:hover在其他浏览器中可能不可靠,所以我不会相信它。

+0

谢谢,其工作 – 2014-10-20 20:31:05

+0

关于范围:我被纯java提出,在那里休息;是为了打破循环,并返回;正在逃避整个功能,但我承认我对jQuery很绿色 – 2014-10-20 20:36:45

+0

@ s1w_起初,作用域对js/jquery来说非常混乱,但是你会掌握它的。我强烈建议阅读jquery范围和关闭,以防意外的事情发生:p – 2014-10-20 20:42:41

0

:hover作为伪选择器或伪事件has been deprecated since jQuery 1.8。这是在another question上提到的(有解决方法)。

如果你改变你的代码:

if ($(".title").is(":focus") || $(".helper1").is(":focus") || $(".helper2").is(":focus")) 

这似乎是有效的,(没有完全测试)大概相当于你当前的代码。尽管评论中提出的其他问题应该是一个更高的关注。

+0

不幸的是,这种替代方法似乎不工作在我的情况..我想使代码是最新的更新和兼容,但:悬停在我的情况下仍然做得更好的结果:/ – 2014-10-20 20:33:24

相关问题