1

所以有很多问题询问如何防止子事件触发父事件,但我似乎找不到相反的问题。

我像这样打开和关闭父事件:

var body_event = function(e){
    console.log('test');
};

$('#btn').toggle(
    function(e){
        $('body').bind('click', body_event);
    }, 
    function(){
        $('body').unbind('click', body_event);
    }
);

目前,如果我在这样的页面上运行它:

<body>
    <div id="btn">click to activate</div>
    <div id="example" onclick="alert('do not show this when event is bound')">
        try the body event by clicking here
    </div>
</body>

切换工作正常,但是当我单击“单击此处尝试正文事件”时,警报仍会显示。我希望能够在绑定主体事件而不单独引用子事件时忽略所有子事件。

换句话说,我正在寻找一个比在切换时做这样的事情更好的解决方案:

$('#example").attr('onclick', '');
4

2 回答 2

1

这很接近,但不完全在那里。它不检查是否绑定了特定的函数,只检查是否有任何事件绑定到 jQuery 对象。

必须有一种方法来查询事件以查找是否必须单击,然后随后它也指向什么功能。希望这能让你开始。

http://jsfiddle.net/PhjB8/

var body_event = function(e) {
    alert('test');
};

$('#btn').toggle(

function(e) {
    $('body').addClass('active').bind('click', body_event);
}, function() {
    $('body').removeClass('active').unbind('click', body_event);
});

$('#example').click(function() {
    //debugger;
    if ($('body').data('events') == undefined) {
        alert('do not show this when event is bound');
    }
});​
于 2012-05-13T04:41:13.197 回答
0

event.stopPropagation() 可以解决这个问题,在body_event里面?

于 2012-05-13T02:58:54.697 回答