如何停止点击复选框上的事件冒泡

我有一个复选框,我希望对click事件执行一些Ajax操作,但复选框也位于具有自己的单击行为的容器内,当单击该复选框时,该复选框不想运行。 这个例子说明了我想要做的事情:

<html lang="en">
    <head>
        <title>Test</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function() {
            $('#container').addClass('hidden');
            $('#header').click(function() {
                if($('#container').hasClass('hidden')) {
                    $('#container').removeClass('hidden');
                } else {
                    $('#container').addClass('hidden');
                }
            });
            $('#header input[type=checkbox]').click(function(event) {
                // Do something
            });
        });
        </script>
        <style type="text/css">
        #container.hidden #body {
            display:none;
        }
        </style>
    </head>
    <body>
        <div id="container">
            <div id="header">
                <h1>Title</h1>
                <input type="checkbox" name="test" />
            </div>
            <div id="body">
                <p>Some content</p>
            </div>
        </div>
    </body>
</html>

但是,我无法弄清楚如何停止事件冒泡而不会导致默认点击行为(复选框变为checked / unchecked)而不运行。

以下两项都会停止冒泡事件,但也不会更改复选框状态:

event.preventDefault();
return false;

更换

event.preventDefault();
return false;

event.stopPropagation();

event.stopPropagation()

停止事件冒泡到父元素,阻止任何父处理程序被通知事件。

event.preventDefault()

阻止浏览器执行默认操作。 使用方法isDefaultPrevented来知道此方法是否曾被调用(在该事件对象上)。


使用stopPropagation方法:

event.stopPropagation();

不要忘记IE:

if (event.stopPropagation) {    // standard
        event.stopPropagation();
    } else {    // IE6-8
        event.cancelBubble = true;
}
链接地址: http://www.djcxy.com/p/41405.html

上一篇: How to stop event bubbling on checkbox click

下一篇: How to disable text selection using jQuery?