javascript - 将事件附加到javascript中的动态元素

标签 javascript

我正在尝试将 html 数据动态插入到动态创建的列表中,但是当我尝试为动态创建的按钮附加 onclick 事件时,该事件没有触发。解决方案将不胜感激。

Javascript 代码:

document.addEventListener('DOMContentLoaded', function () {
   document.getElementById('btnSubmit').addEventListener('click', function () {
        var name = document.getElementById('txtName').value;
        var mobile = document.getElementById('txtMobile').value;
        var html = '<ul>';
        for (i = 0; i < 5; i++) {
            html = html + '<li>' + name + i + '</li>';
        }
        html = html + '</ul>';

        html = html + '<input type="button" value="prepend" id="btnPrepend" />';
        document.getElementsByTagName('form')[0].insertAdjacentHTML('afterend', html);
    });

    document.getElementById('btnPrepend').addEventListener('click', function () {
        var html = '<li>Prepending data</li>';
        document.getElementsByTagName('ul')[0].insertAdjacentHTML('afterbegin', html);
    });
});

HTML代码:

<form>
    <div class="control">
        <label>Name</label>
        <input id="txtName" name="txtName" type="text" />
    </div>
    <div class="control">
        <label>Mobile</label>
        <input id="txtMobile" type="text" />
    </div>
    <div class="control">
        <input id="btnSubmit" type="button" value="submit" />
    </div>
</form>

最佳答案

这是因为您的元素是动态创建的。你应该使用 event delegation处理事件。

 document.addEventListener('click',function(e){
    if(e.target && e.target.id== 'brnPrepend'){
          //do something
     }
 });

jquery 使它更容易:

 $(document).on('click','#btnPrepend',function(){//do something})

这是一篇关于事件委托(delegate)的文章event delegation article

关于javascript - 将事件附加到javascript中的动态元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34896106/

相关文章:

JavaScript 每次出现都替换正则表达式,但最后一次?

javascript - 无法使用 angular.js 将值设置为下拉所选值

javascript - React-router:TypeError:无法设置未定义的属性 'props'

javascript - 使用 Durandal 的单个网页应用程序的全局变量

javascript - jQuery SVG 嵌套组

javascript - 如何在 <canvas> 上绘制文本,它遵循使用 quadraticCurveTo 方法绘制的二次曲线

javascript - 检查用户在 JQuery 中是否有未保存的数据?

javascript - html body onload 不起作用

c# - 如何使用 Jquery Ajax 调用填充 DropDown?

javascript - 是否可以将 ES6 导入直接添加到对象上?