$(“。someclass”)。is(“:hover”)仅适用于单个“someclass”实例

时间:2014-10-20 19:23:42

标签: jquery hover

我有一个奇怪的问题。我希望.slideUp()在点击任何地方之后有一些div,但只有当鼠标没有悬停特定元素时......

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

此代码对我很有用(hover" dev_helpers"在http://siwego.net -top页面),直到我不得不添加第二个" .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();
});

错误不再显示,但是:hover check' for each'不起作用(它不会阻止slideUp())。

我必须这样做:

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

但它不是我的解决方案,因为我必须为每个" .helperX"添加新的元素检查。实例.....

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

2 个答案:

答案 0 :(得分:1)

如上所述,:hover伪选择器似乎有一些问题,但它在Chrome上使用jQuery边缘对我有用。

您不需要使用.each()循环(并且您似乎无法理解范围的工作原理。return的范围是.each(),但它不是return {1}}中的{1}}。无论如何,你可以这样做:

mousedown

你可以在这里看到它:http://jsfiddle.net/4x661tt6/。但是,if ( $(".title").is(":hover") || $(".helper:hover").length ) return; 在其他浏览器中可能不可靠,所以我不相信它。

答案 1 :(得分:0)

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

如果您将代码更改为:

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

这似乎是有效的(没有完整测试)可能相当于您当前的代码。虽然评论中提出的其他问题应该是一个更高的问题。