无法解除绑定到$(文档)的事件

时间:2011-03-16 00:25:26

标签: jquery events bind unbind

我通过$(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事件处理程序也没有绑定,这对我来说是个问题。

2 个答案:

答案 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
}