Javascript 单击新DOM元素不工作的事件

Javascript 单击新DOM元素不工作的事件,javascript,Javascript,我的js代码中有这样的代码: window.onload = function() { document.getElementById('change_user').addEventListener("click", function() { getUserData(document.getElementById('change_user').getAttribute('data-user')); }, false); } 它在我第一次单击该元素时起作用

我的js代码中有这样的代码:

window.onload = function()
{
    document.getElementById('change_user').addEventListener("click", function()
    {
        getUserData(document.getElementById('change_user').getAttribute('data-user'));
    }, false);
}
它在我第一次单击该元素时起作用,但当该元素被新的HTML代码替换时,单击它不再起任何作用


怎么了?

删除元素后,所有绑定事件也会被删除。如果以后重新添加相同的元素,则需要再次绑定事件

在这种情况下,也许更好的方法是监听身体上的点击事件,然后检查目标是否是
change\u user
元素。这称为事件委派

有关纯JS示例,请参见

仅供参考,使用jQuery很容易做到这一点:

$('body')。在('click','change_user',function(){…})上


请参见

替换元素时,事件处理程序将丢失。事件处理程序附加到特定元素。当您更改父元素的HTML时,所有子元素都将完全替换为新元素,这些新元素开始时没有事件处理程序

您有几个选择:

  • 替换新元素后,在新元素上建立新的事件处理程序
  • 停止替换元素本身,只需修改现有元素的内容即可。如果元素本身没有被替换,那么事件处理程序将保持不变
  • 从本身未被替换的父对象切换到使用委托事件处理。这取决于这样一个事实,即许多事件通过父链冒泡,并且可以在那里被拦截,即使子元素来来去去或被替换
  • 您可以在以下其他答案中阅读有关委派事件处理的更多信息:


    这些其他答案参考jQuery,但无论是使用jQuery还是使用普通Javascript,其概念都是相同的。

    请为
    getUserData
    @user5893820添加您的代码-这是否回答了您的问题?如果是,请通过单击答案左侧的绿色复选标记向社区指出。如果没有,请解释你还需要什么帮助。