javascript - jquery动态添加元素
迷茫
迷茫 2017-04-10 15:27:00
[JavaScript讨论组]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script>
        $(function(){
            $('.add').click(function(event) {
                $('body').append('<p class="txt">aaaaaaaaaaaa</p>');
                     $('.txt').click(function(event) {
                    console.log("a");
                });
            });
        })
    </script>
</head>
<body>
    <a href="#" class="add">添加一个</a>
    <a href="#" class="delete">删除一个</a>
</body>
</html>

请问,当我点击4次<a href="#" class="add">添加一个</a>的时候,页面出现4条aaaaaaaaaaaa,当我点击第一条aaaaaaaaaaaa,打印4次a,点击第二条aaaaaaaaaaaa,打印3次a。。。。这是为什么,事件冒泡吗??我阻止了也好像没有效果。。我要怎么做才能是点击每一条时只打印一次a。。。。求助,谢谢

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
大家讲道理

动态元素的事件绑定请使用事件委托

javascript$('body')
    .on('click', '.add', function(){
        $('body').append('<p class="txt">aaaaaaaaaaaa</p>');
    })
    .on('click', '.txt', function(){
        console.log('a');
    });
阿神

很久之前我也遇到类似的问题, 解决方法 http://www.lao8.org/article_1323/jquery_click

天蓬老师

第一次:
<p class="txt">aaaaaaaaaaaa</p>(它有一次点击事件)

第二次:
<p class="txt">aaaaaaaaaaaa</p>(它有二次点击事件)
<p class="txt">aaaaaaaaaaaa</p>(它有一次点击事件)

第三次:
<p class="txt">aaaaaaaaaaaa</p>(它有三次点击事件)
<p class="txt">aaaaaaaaaaaa</p>(它有二次点击事件)
<p class="txt">aaaaaaaaaaaa</p>(它有一次点击事件)

第四次:
<p class="txt">aaaaaaaaaaaa</p>(它有四次点击事件)
<p class="txt">aaaaaaaaaaaa</p>(它有三次点击事件)
<p class="txt">aaaaaaaaaaaa</p>(它有二次点击事件)
<p class="txt">aaaaaaaaaaaa</p>(它有一次点击事件)

想要阻止这种事发生:应该每添加一次p的时候:$('.txt').unbind('click');

修改代码如下:

$('.add').click(function(event) {
    $('body').append('<p class="txt">aaaaaaaaaaaa</p>');
         $('.txt').unbind('click').click(function(event) {
        console.log("a");
    });
});
伊谢尔伦

感觉楼上的回答也不是一个很好的方法。理解了$('.txt')其实就很简单了。。

伊谢尔伦

出现这种情况是因为你重复的给已有的元素赋予点击事件。
当你追加第一个p元素的时候,你立即给.txt的p元素赋予了点击事件这个时候。
当你追加第二个p元素的时候,你又立即给.txt的元素赋予了点击事件,而你第一个.txt的p元素在我们第二句话的时候已经赋予了点击事件,这个时候你是第二次赋予,那么在你点击第一个追加的元素的时候,就会产生两次点击效果。后面的一次类推。

巴扎黑

同意楼上的意见,我再稍微补充一下$('.click').click(function(){ console.log('a'); }); $('.click').click(function(){ console.log('a'); }); $('.click').click(function(){ console.log('a'); });
如果是这样静态的加上这些代码,点一下就会出现3个a,这样的话就好理解楼上的说法了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号