代码之家  ›  专栏  ›  技术社区  ›  Robert Hurst Patrick Ryan

停止jquery live钩住所有子级

  •  0
  • Robert Hurst Patrick Ryan  · 技术社区  · 15 年前

    我无法阻止这个愚蠢的东西在盘旋在物品的孩子们身上时触发一个事件。 我只想通过 div.item 元素,而不是 div.itemChild . 这让我抓狂了,请帮忙。

    event.stopperopation不起作用。也不 if(!$(event.source).is('itemChild')) ,出于某种原因 is() 总是返回错误。

    HTML

    <div id="items">
        <div class="item">
            <div class="itemChild">
            </div>
            <div class="itemChild">
            </div>
        </div>
    </div>
    

    JS

    //on hover event for each post
    $('div.item', '#items').live('mouseover mouseout', function(event){
        if (event.type == 'mouseover'){
            //fire mouseover handler
        }
        else{
            //fire mouseout handler
        }
    });
    

    有没有办法阻止活着的人在孩子们盘旋的时候开火? 分项 ?

    对了,孩子们 分项 完全覆盖。

    基本上,我希望它的作用类似于.hover(),但绑定到通过Ajax加载的内容上。

    1 回复  |  直到 15 年前
        1
  •  2
  •   cletus    15 年前

    它对孩子们没有约束力。它正在冒泡地向父母冲去。

    另外,您的语法不正确。这是:

    $("div.item", "div.items")...
    

    意思是“找到所有带有类项的div,这些div是带有类项的div的后代。”但是你没有这样的潜水器(带类项目)。您有一个带有项目ID的DIV。

    结合所有这些尝试:

    $("#items div").live("mouseover mouseout", function(event) {
      if ($(event.source).hasClass("itemChild")) {
        return false;
      } else if (event.type == "mouseover") {
        ...
      } else {
        ...
      }
    });
    

    或者,或者:

    $("#items > div.item").live("mouseover mouseout", function(event) {
      if (!($this).is("div.item")) {
        return false;
      }
      ...
    });
    

    基本上,有很多种方法可以剥下这只猫的皮,但是就像我在第一句话中说的那样,你必须理解事件会一直冒泡,直到处理程序停止传播,或者直接(通过调用 event.stopPropagation() 或返回 false 来自事件处理程序,相当于 event.stopPropagation(); event.preventDefault(); )

    另外,如果你在做 mouseenter mouseout 你最好用一下 hover() 同时发生以下两种情况的事件:

    $("#items > div.item").live("hover", function(event) {
      // mouseenter
    }, function(event) {
      // mouseout
    });