【问题标题】:add eventlistener "load" after the event has been fired在事件触发后添加事件监听器“加载”
【发布时间】:2017-03-01 13:00:31
【问题描述】:

当我在事件触发后添加一个“load”类型的事件监听器(我的意思是addEventListener("load", function(event){...}))时会发生什么(例如,我在我的文档开头加载了一个谷歌地图api而不是我正在做的一些事情php 请求,然后我添加侦听器以决定是否已加载 google-api 脚本)。我希望 EventListener 在脚本已经加载的情况下调用回调。默认情况下会发生这种情况吗?

我的代码是这样的

html-doc:

<script src="https://maps.googleapis.com/maps/api/js?key=...&callback&signed_in=true&callback=RoadtripsTable.drawRoadtripsOnMap"async defer></script>

JS 文档:

$.ajax({
    type: "POST",
    url: "../PHP/RoadtripsTable.php",
    data: ({
    fnChoice: "listRoadtrips"
}),
    success: function(result){
             head.addEventListener("load", function(event) {
                 if (event.target.nodeName === "SCRIPT")
                 {
                 /*now I would like to call the callback of the script tag in html*/ drawRoadtripsOnMap(); /* but what happens when the script was alread loaded?*/
                 }
             }, true);

             }
});

【问题讨论】:

  • 请贴一些代码

标签: javascript event-listener


【解决方案1】:

在我看来,您需要切换到Promises,因为一旦事件已经发生,处理事件的传统方式将不会触发,但如果您在代码中使用承诺,那么 Promise 让您可以灵活地执行代码(您计划在事件触发后执行代码,如回调),即使事件已经发生。

Javascript Promises

【讨论】:

  • @Nighel 是的!它有效,但我喜欢承诺,而且更好。
【解决方案2】:

如果我没听错,你只需要检查谷歌地图是否加载

if (google && google.maps) {
    // google maps is loaded
}

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多