javascript - 将元素添加到 DOM 后,它不会运行相同的功能

标签 javascript jquery

<script type="text/javascript">
$(function(){
    $('button').each(function(i){
        $(this).click(function(){
            $(this).after('<br /><button type="button">Button</button>');
        });
    });
});
</script>
<button type="button">Button</button>

如果我单击该按钮,它就会起作用并在其后面添加一个按钮。我可以继续单击同一个按钮并添加更多按钮。但是,如果我单击任何已添加的按钮,它们不会添加任何内容。我尝试更改为:

    $(function(){
    function update(){
        $('button').each(function(i){
            $(this).click(function(){
                $(this).after('<br /><button type="button">Button</button>');
                update();
            });
        });
    };
    update();
});

但是这会选择第一个按钮两次,所以如果我按一次它就会起作用,它添加的按钮也会起作用,但如果我第二次按第一个按钮,它会添加 2 个以上的按钮,然后再添加 4 个按钮,等等。

最佳答案

使用事件委托(delegate)来管理点击事件。

$('body').delegate('button','click',function() {
    $(this).after('<br /><button type="button">Button</button>');
});

这使用 delegate() [docs]方法来处理 <body> 中发生的所有点击并对匹配 'button' 的元素执行选择器。

尝试一下: http://jsfiddle.net/Krrae/

如果所有按钮都位于公共(public)容器中(<body> 除外),则将其用于委托(delegate):

$('#some_button_container').delegate('button','click',function() {
    $(this).after('<br /><button type="button">Button</button>');
});

关于javascript - 将元素添加到 DOM 后,它不会运行相同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511326/

相关文章:

javascript - 在 es6 中使用 onChange

javascript - 如何从另一个 View 模型检索 View 模型?

javascript - 用 .classList.toggle 覆盖 .style.property 值似乎不起作用

jquery - 在 e.keycode == 9(制表符)上,添加 12 个空格,并防止默认行为

jquery - 需要条件语句才能仅在不是 IE8 或之前版本且不是移动设备的情况下加载脚本

javascript - webpack 构建到多个文件

javascript - Karma单元测试跨域资源AngularJS

php - 如何创建一个奇特的 "add tag"系统

javascript - 如何使用 Angularjs 将 html 绑定(bind)到字符串中?

javascript - 下一个TD的第一个TD