18

イベントをバブルさせるのではなく、キャプチャする必要があります。これは私が欲しいものです:

<body>
   <div>
   </div>
</body>

このサンプル コードから、div と body にバインドされたクリック イベントがあります。body イベントが最初に呼び出されるようにします。どうすればいいですか?

4

3 に答える 3

3

私は次のようにします:

$("body").click(function (event) {
  // Do body action

  var target = $(event.target);
  if (target.is($("#myDiv"))) {
    // Do div action
  }
});
于 2013-06-22T10:04:39.283 に答える
1

@pvnarulaの回答よりも一般的に:

var global_handler = function(name, handler) {
    var bodyEle = $("body").get(0);
    if(bodyEle.addEventListener) {
        bodyEle.addEventListener(name, handler, true);
    } else if(bodyEle.attachEvent) {
        handler = function(){
            var event = window.event;
            handler(event)
        };
        document.attachEvent("on" + name, handler)
    }
    return handler
}
var global_handler_off = function(name, handler) {
    var bodyEle = $("body").get(0);
    if(bodyEle.removeEventListener) {
       bodyEle.removeEventListener(name, handler, true);
    } else if(bodyEle.detachEvent) {
       document.detachEvent("on" + name, handler);
    }
}

次に使用します:

shield_handler = global_handler("click", function(ev) {
    console.log("poof")
})

// disable
global_handler_off("click", shield_handler)
shield_handler = null;
于 2014-04-19T00:41:26.783 に答える