我通过$(document).bind()。
将事件处理程序绑定到页面的每个元素有人知道如何解除特定元素的处理程序吗?
以下是我的示例代码无法按照我想要的方式运行:
<html><head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"> </script>
</head>
<body>
<div id="mid" style="cursor:pointer" >click me</div>
<div>sample</div>
<script type="text/javascript">
var fun = function() {
alert('default handler');
};
$(document).bind('click.custom', fun);
//trying to unbind the handler but it remains there
$("#mid").unbind('click.custom');
</script>
</body>
</html>
在这里考虑丹尼尔的答案再次是这个问题:
var ff = function() {
alert('additional');
}
$(document).bind('click.custom', fun);
$(document).bind('click.custom2', ff);
$("#mid").bind('click.custom', false);
这里有趣的事件处理程序与#mid元素完全没有绑定,但是ff事件处理程序也没有绑定,这对我来说是个问题。
答案 0 :(得分:1)
它被称为事件冒泡。嵌套元素的事件会转移到父母身上。
您应该bind
到#mid
并从该处理程序返回false
。
答案 1 :(得分:0)
只有一个事件绑定到文档。由于冒泡,事件将被发送到DOM层次结构,直到它的传播停止,或者它到达文档。
如果来自#mid
,您可以修改回调以忽略此事件,或者使用内置委托/ live来实现相同的效果。
$(document).delegate('[id!="mid"]', 'click.custom', fun);
这将忽略来自具有id“mid”的元素的事件。另一种方法是修改函数本身。
function fun() {
if (this.id == "mid") {
return; // if event came from #mid, ignore it.
}
// continue processing as normal
}