javascript - 如何在同一页面上多次使用 windows.onload 或 a.click 等事件监听器?

标签 javascript event-listener onload

我有一些外部 js 脚本可供用户嵌入到他们的网站上。它们单独工作正常,但如果您尝试在同一页面中附加两个,其中一个会崩溃(控制台上没有错误)。我认为问题出在多次调用 windows.onload 上。

下面是两个嵌入代码的样子:

代码1

  <script type="text/javascript" src="http://example.com/widget.js"></script>
  <p><span class="punctis-social-widget"></span></p>

代码2

  <script type="text/javascript" src="http://example.com/poll.js"></script>
  <p><span class="punctis-poll-button"></span></p>

poll.js 和 widget.js 只是两个简单的函数:

poll.js

window.onload = function() {
   alert('IM POLL.js');
}

widget.js

window.onload = function() {
   alert('IM WIDGET.js');
}

如果您在同一页面中插入代码 1 和代码 2,则该脚本之一将不会加载。我该如何解决这个问题?

最佳答案

使用EventTarget.addEventListener()

同一页面上不能有两个 window.onload。 第二个将覆盖第一个。要解决您的问题,请改用多个 addEventListener 。它将添加功能而不是替换相同的功能。

只需替换此window.onload=function(){}

通过这个 window.addEventListener("load", function(evt) {/* do some */})

说明:

let el = document.getElementById('a'); // window in your case

el.addEventListener('click', function(evt) { /* do task 1 */ });
el.addEventListener('click', function(evt) { /* do task 2 */ });

//similarily for window
window.addEventListener("load", function(evt) { /* do task 1 */})
window.addEventListener("load", function(evt) { /* do task 2 */})

关于javascript - 如何在同一页面上多次使用 windows.onload 或 a.click 等事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857805/

相关文章:

javascript - 基于javascript中的多个键对数据进行分组

javascript - 如果从 Dropdown Knockout js 中选择特定值,则显示 div

没有原型(prototype)的Javascript继承

java - Android 应用程序中的旋转 vector 传感器不适用于我的 Moto G

javascript - React 在 body 外渲染 d3 图表

javascript - 单击内存游戏的第一张牌时启动计时器

exception - Symfony2 - 操纵来自内核异常监听器的请求/响应

javascript - 如何查看哪些元素仍在加载并阻碍 window.onload 触发?

javascript - 加载时追加子项

javascript - 在主体加载 javascript 上调用函数?