异步重新加载 HTML 和 JS 代码会使 JS 事件侦听器不会对重新加载的 HTML 代码的单击做出反应


Asynchronously reloading HTML and JS code makes JS event listeners not react to clicks on reloaded HTML code

我正在用游戏生活建立一个网站,其中只有一个页面对用户可见。我正在使用 AJAX 让用户提交模式(作为一系列整数处理),模式将保存到服务器并自动显示在面板中。面板中的图案是可点击的,用户可以选择图案并放置在网格上。在用户提交内容之前,一切正常。当用户提交模式时,将重新加载使模式可单击的面板和 JS 代码。面板按预期重新加载,我在"检查元素"中看到 JS 代码也被重新加载。但是,JS被忽略了!JS代码包含由动态加载的JS代码中的事件侦听器调用的函数(侦听面板中的单击,在求和时重新加载)。让我感到困惑的是,它在重新加载面板之前有效,但在重新加载之后就不行了。似乎重新加载面板会使事件侦听器失去与面板的关联。

我意识到这个问题变得混乱了。我将尝试总结:

页面加载:面板加载 PHP file_get_contents(),JS 事件侦听器和处理程序异步加载。事件侦听器对事件做出反应(单击面板中的模式)。

用户提交内容:面板和JS代码异步重新加载(获取单行面板:file_get_contents在单独的php文件中)。现在,事件侦听器不会对事件做出反应(单击面板中的模式)。

我的问题是,我该如何解决这个问题?

作为参考,该网站是 tunetiles.com。我命名该网站,以便您可以访问来源,我希望它不被视为广告。

你需要使用 on() 方法而不是 click() 绑定你的事件。一旦 DOM 被重新创建,单击绑定事件将不会触发。更多信息在这里 http://api.jquery.com/on/

至于重新加载javascript - Pointy有一个很好的观点