javascript - 等待多个事件

标签 javascript dom-events

我目前正在开发一个主要用于自学目的的应用程序,因为我还没有完全习惯 js,所以我可以使用一些帮助来解决我的问题:

在我的应用程序中,我使用了一个 Javascript 库 (jqMobi),它用于 DOM 操作、页面转换、ajax 调用等,我还使用 phonegap 访问设备功能,例如地理定位。

当我启动我的应用程序时,我想获取设备的地理位置,向我的服务器发送一个 ajax (jsonp) 请求(包括设备的地理位置),该请求返回我将用于构建的 JSON 对象数组列出一个 list 。

在获取地理定位之前,我需要等待 phonegap 加载。在使用 jqMobi 进行 ajax 调用和处理响应之前,我还需要等待它加载。

所以我基本上必须听一些事件

document.addEventListener("DOMContentLoaded",execute_this,false);  //jqMobi is now ready
document.addEventListener("deviceready", execure_sth, false); //Phonegap is now ready

如何在这两个事件都触发后立即执行一个函数,而不是之前?

如果我使用 jQuery,我会使用它的 $.Deferred 对象和它的 When ... Then 函数,但由于我无法访问这些,所以我正在寻找一个替代方案。

最佳答案

乍一看,像这样的东西肯定有用:

var executed_this = false, executed_sth = false;

function execute_this() {
  executed_this = true;
  combined_execution();
}

function execute_sth() {
  executed_sth = true;
  combined_execution();
}

function combined_execution() {
  if (executed_this && executed_sth) {
    // magic!
  }
}

但是不可扩展(如果你想等待第三个事件怎么办?)。计数器可以工作:

var wait_on = 2;

function execute_this() {
  combined_execution();
}

function execute_sth() {
  combined_execution();
}

function combined_execution() {
  wait_on--;
  if (wait_on === 0) {
    // magic!
  }
}

更具可扩展性,但假设事件只触发一次。无论哪种方式,这些都是可以控制您所要求的流量控制类型的原语,而其他一切(在大多数情况下)都是对这两者的更高级别的抽象。

关于javascript - 等待多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13960773/

相关文章:

javascript - 如何使用 jquery .load 打开模态框

javascript - 更改 DIV 的焦点以允许水平滚动

javascript - 如何引用页面真实的 'body'? [不是 iFrame 主体]

javascript - 在浏览器/窗口之外捕获 mouseup 事件

javascript - 动态替换 SVG 中的图像元素

javascript - Rails - 如何将 javascript 变量放入 erb 代码中

javascript - 如何使用javascript设置交替行背景颜色

javascript - 全局 Javascript 事件处理对象上下文

Javascript:链接 href 目标

javascript - 使用 javascript/jQuery 将触摸事件应用于每个点击事件