イベントをバブルさせるのではなく、キャプチャする必要があります。これは私が欲しいものです:
<body>
<div>
</div>
</body>
このサンプル コードから、div と body にバインドされたクリック イベントがあります。body イベントが最初に呼び出されるようにします。どうすればいいですか?
イベントをバブルさせるのではなく、キャプチャする必要があります。これは私が欲しいものです:
<body>
<div>
</div>
</body>
このサンプル コードから、div と body にバインドされたクリック イベントがあります。body イベントが最初に呼び出されるようにします。どうすればいいですか?
私は次のようにします:
$("body").click(function (event) {
// Do body action
var target = $(event.target);
if (target.is($("#myDiv"))) {
// Do div action
}
});
@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;