是否可以在JavaScript的执行堆栈末尾放置一段代码
Is it possible to put a piece of code at the end of execution stack in JavaScript
例如,我有许多处理程序在文本框的焦点之外。我想通过代码聚焦文本框,并在执行所有处理程序后运行另一个代码。
-------更新------
就我而言,我无法访问事件处理程序。它是一个具有自己的 UI 的外部模块。实际上我使用Chromium Embedded Framework。网页上的某些模块在聚焦后保存其数据。
是否可以在JavaScript的执行堆栈末尾放置一段代码
不可以,因为从技术上讲,您只能将东西放在堆栈的顶部,而不能放在堆栈下方。
但是,您可以利用这样一个事实,即在执行堆栈清除后,引擎会查看另一个称为"回调队列"的存储,其中已完成的异步操作的回调等待轮到它们被执行。
定时器
您可以使用计时器。计时器的工作方式是,计时器在计数完成时,将回调排队到回调队列中。如前所述,当执行堆栈清除时,引擎会查看回调队列,选取回调并执行它。所以从技术上讲,它不在堆栈的末尾,而是在堆栈清除后执行它,这应该看起来差不多。
但是,仅当所有其他处理程序执行同步代码时,才会执行此操作。如果其中一个执行异步操作(如 AJAX 或 timered 内容),JS 将以相同的方式对该 AJAX 回调进行排队,您将失去效果。在这里看到它的实际效果:http://jsfiddle.net/w8brztL4/
后期绑定
另一种方法是取消绑定您的处理程序以进行焦点输出并重新绑定它。这样,它是最后注册的,并且很可能会在附加的处理程序中最后执行。
但是,据我所知,jQuery的执行顺序是:绑定在元素上的所有处理程序首先到最后一个,然后父级首先绑定到最后一个,然后绑定到父级的父级首先到倒数第二个,依此类推。在这里看到它的实际效果: http://jsfiddle.net/rcc0c9em/为了获得最大的效果,请在很晚的地方绑定,例如在document
上。
大多数浏览器都有一个名为 setImmediate(callback)
的函数,该函数在当前事件队列为空后立即将回调排队执行。
对于不支持它的浏览器,您可以得到几乎相同的东西 setTimeout(callback, 1)
.
- 在经过一段时间或满足条件后运行代码
- 将字符串作为一段 HTML/javascript 代码执行
- 在一段真实代码中延迟
- 将一段JavaScript代码转换为PHP
- 下面的一段代码在jquery中会做什么
- Javascript 使用单个函数从另一段代码中取消 POST
- 在页面首次加载时执行 jQuery 代码,然后在一段时间后加载
- 在 android 的 webview 中嵌入一段 HTML 代码或 Javascript 脚本
- 在一段时间后持续运行 JavaScript 代码
- 如何获取单击元素的类值,并使用此值在 jquery 中最后一次出现此类之后放置一段 html 代码
- 哪一段代码通常更容易被接受
- JQuery 将一段代码应用于多个元素
- 在页面加载后淡出对象一段时间,然后在淡出后运行另一组代码
- 运行代码一段时间
- 链接到同一页面上的一段代码
- 如果选中了特定的复选框,我想运行另一段 jQuery 代码(如果是)
- 是否可以在JavaScript的执行堆栈末尾放置一段代码
- 如果没有jQuery,javascript如何检查多个ajax调用是否已经完成,一旦完成,就执行一段代码
- 在浏览器向服务器发送任何操作URI的请求之前执行一段代码
- Node.js:确保一段代码一段接一段地执行