javascript - 为什么我不能使用 jQuery 隐藏点击元素?

标签 javascript jquery event-propagation

我想让一个div用jquery和css显示和消失。 该代码不起作用:

HTML

<html>
    <head>

    </head>
    <body>
        <div class="box" id="b1">
            <a href="#">click to show content</a>

            <div class="content">
                here is content here is content here is content
                <div class="button" id="b2">remove content</div>
            </div
    </body>
</html>

jQuery

$(document).ready(function() {
    $('#b1').click(function() {

        $('.content').css({
            "display": "block"
        });
    });

    $('#b2').click(function() {

        $('.content').css({
            "display": "none"
        });
    });
});

演示: http://jsfiddle.net/jTgRF/41/

最佳答案

问题在于您没有阻止事件的传播。

当您单击按钮时,它实际上首先会隐藏该元素,但事件会传播到父元素,您会在父元素处捕获单击并再次显示它。它进行得如此之快,看起来好像没有发生任何事情,但实际上,当您单击 #b2 时,元素会被隐藏,然后事件会冒泡到父级 #b1,您已附加点击事件监听器以显示内容。

因此,您需要使用.stopPropagation()#b2上。

$(document).ready(function(){
     $('#b1').click(function(){
           $('.content').show();
    });
    
    $('#b2').on("click", function(e){ 
           $('.content').hide();
            e.stopPropagation();
    });
}); 

您需要做的是将点击事件传递给回调函数(在我的示例中声明为 e),然后对其调用 stopPropagation() 以使其确保它不会冒泡到父元素。

这是一个工作示例:http://jsfiddle.net/jTgRF/64/

注意 我使用 .show().hide(),这与您使用 所做的完全相同.css(),但在我看来更具可读性。

编辑:

正如 Venu 在他的回答中指出的,如果您单击黑色区域,内容也会显示,而不仅仅是“显示内容”文本。解决这个问题的最简单方法是将 id="b1"属性从带有类内容的 div 中移动,并将其放在 a 元素上。

查看我更新的 fiddle :http://jsfiddle.net/jTgRF/65/

关于javascript - 为什么我不能使用 jQuery 隐藏点击元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11178121/

相关文章:

java - 如何将Sublime Text的UI主题获取到NetBeans?

javascript - 你如何测试模态 jquery 对话框是否失去了焦点?

javascript - 如何更改 Bootstrap 轮播方向

javascript - 单击行时表的高度发生变化

c# - Unity 防止点击按钮

javascript - Highcharts、Mysql 和 Codeigniter

javascript - Bootstrap 4 使用 e.latedTarget 查找元素

php - jQuery:禁用 anchor 并使用相同的 href 创建一个新 anchor

javascript - 自定义事件的传播

jquery mobile - 弹出窗口中的自定义选择菜单