【发布时间】:2017-12-09 21:02:54
【问题描述】:
我有一个通过 AJAX 加载内容的网站。我需要将 onclick 处理程序附加到一些动态加载的 div 上。如果我的事件处理程序已经在我的主 javascript 文件中定义,它工作正常(无论我通过属性 onclick="myFunc" 上的标记将它附加到更迂腐的 addEventListener 上)。
但是,我希望在 动态加载 内容的 <script> 标记中定义此事件处理程序。然后不管<script>function myHandler(){}</script>是在<div onclick='myHandler();'>之前还是之后都行不通。
我尝试将它附加在 XmlHttpRequest 的末尾:
contentDiv.innerHTML = xhr.responseText;
var handlerName = getItFrom(xhr.responseText);
var clickFn = window[handlerName];
loadedDiv.addEventListener('click', clickFn);
也不起作用:handlerName 是正确的,但 clickFn 仍未定义...
我更喜欢纯 js 的答案,但如果我可以轻松翻译,jquery 也可以。
【问题讨论】:
-
在哪里定义了
window[handlerName],又在哪里定义了loadedDiv? -
没有人再用这种方式编写前端代码了 :( 但是如果你必须给分配一个 id ,然后通过将事件侦听器附加到你的 html 元素来处理加载事件......或者你可以拿起 webpack 并做出反应,让你的生活更轻松@Kosh
window[handlerName]只是一种通过名称获取函数对象的方法。如果在可以工作的主要 javascript 中定义了 handlerName。loadedDiv当然是通过document.getElementById给出的。我只是跳过了这些细节,因为它们无关紧要。@Dmitry 是完全一样的问题:如果onload事件监听器是通过动态内容发送的,就不起作用了。@James 谢谢!我错过了这篇文章。所以,它不起作用,期间。似乎唯一的解决方案是将脚本作为文件加载,但不能包含在 innerHTML 中。
标签: javascript ajax html