我有一个文档可能会让用户能够多次运行相同的功能。有没有办法检查功能是否正在运行,然后才能重新激活它?有没有办法检查一个函数是否正在jQuery中运行?
回答
设置外部标志。
var functionIsRunning = false;
function myFunction() {
if (!functionIsRunning) {
functionIsRunning = true;
//do stuff
functionIsRunning = false;
}
}
同样的原理适用于jQuery函数。
这很容易。该功能未运行。
JavaScript是严格单线程的。如果浏览器正在响应任何用户事件,则目前没有功能正在运行。
,而这是真的,你可能只想排队后的调用先前的代码已经完成运行。 ESP。如果在第一种情况下使用定时器http://jsfiddle.net/gryzzly/ZGVan/,没有预防动画会堆积起来(我知道jQuery的助手“停止”函数,并且jQuery通常允许您与动画进行交互,但它只是一个参与定时器的例子)。 – 2012-03-15 23:59:25
@gryzzly:这是完全不同的东西。如果您正在等待动画结束,那么您并未检查函数是否正在运行,您正在等待定时器中运行的代码达到特定状态。 – Guffa 2012-03-16 00:26:14
如果有大量的实用工具的功能,您的呼叫很多来帮助你管理这个检查无极
你可以设置一个标志。像这样:
(function() {
// your application within a closure to not pollute global scope
var handlerRunning = false;
// the function that will be called and shouldn't be running twice
var handler = function() {
if (handlerRunning) return;
handlerRunning = true;
// do stuff here
// when you're done, set handlerRunning to false
handlerRunning = false;
}
// assign your code to event handler for example
document.getElementById('awesome-button').addEventListener('click', handler, false);
}());
没有关闭我的头顶,但你可以使用一个变量来设置是否正在执行的函数。是这样的:
function MyWrapper() {
this.running = false;
this.run = function() {
if (this.running==false) {
this.running = true;
// do something
this.running = false;
return true;
}
else {
return false;
}
};
}
如果单一延迟传递给
jQuery.when
,承诺对象(属于递延方法的子集)通过该方法返回。可以调用Promise对象的其他方法来附加回调,例如deferred.then
。当Deferred被解决或被拒绝时,通常由最初创建Deferred的代码来调用适当的回调函数。例如,通过jQuery.ajax()
返回jqXHR对象是一种承诺,可以这样使用:
$.when($.ajax("test.aspx")).then(function(data, textStatus, jqXHR) {
alert(jqXHR.status); // Alerts 200
});
逾期答复,但我仍想在这里注册我的答案。 我遇到了一个类似的问题,其中我嵌入了setInterval
后台服务器检查功能。但是,在我的代码中,还有很多可能性在其他条件下触发相同的功能。所以,为了确保我不记得它,我只是使用本地存储来确保函数不会被一次又一次地调用。
此功能是在我的HTML文件,
function serverCheck(value){
localStorage.setItem("isFunctionRunning",1);
setInterval(checkServerStatus, value);
}
以下代码段是我的另一个JS文件,
function xyz(){
//someCode
var checkFunction = localStorage.getItem("isFunctionRunning");
if(checkFunction != 1){
serverCheck(frequency);
}
}
- 1. 有没有办法检查子进程是否仍在运行?
- 2. 有没有办法检查Django管理命令是否正在运行?
- 3. 有没有办法检查代码是否在TransactionScope中执行?
- 4. 有没有办法来检查一个JavaScript函数是否接受回调?
- 5. 有没有办法检查下一个令牌是否结束?
- 6. 有没有办法检查一个属性是否超载?
- 7. 有没有办法检查一个var是否使用setInterval()?
- 8. 有没有办法检查我的脚本是否在phantomjs中运行?
- 9. 有没有办法检查用户是否使用JQuery登录?
- 10. 有没有办法在jQuery中永久定义一个函数?
- 11. 有没有办法检查ansicon.exe是否存在,而不使用CMake运行它?
- 12. 有没有办法检查是否有其他程序全屏运行
- 13. 有没有办法检查一个变量是否是整数? C++
- 14. 有没有办法检查一个cookie在PHP中是否安全
- 15. 有没有办法检查一个phpspec数组是否在多维数组中有一个键
- 16. 有没有办法检查一个变量是否是JavaScript中的日期?
- 17. 运行FactoryGirl时有没有办法检查DB数据?
- 18. 有没有一种方法可以检查一个函数在另一个函数中是否属实?
- 19. 有没有办法检查两个DOM元素是否相等?
- 20. 有没有办法让标签在Python Tkinter中运行一个函数?
- 21. 有没有办法在ssh中运行本地bash函数
- 22. 有没有办法检查两个对象在Java中是否是别名?
- 23. 有没有办法检查我的代理是否在线?
- 24. 有没有办法检查文件是否在使用
- 25. 可可 - 有没有办法检查NSURLConnection是否存在缓存?
- 26. 有没有办法来检查一个元素是否有鼠标悬停?
- 27. 有没有办法检测一个网站是否使用SPDY?
- 28. 有没有什么办法来检查VBScript函数是否被定义?
- 29. 有没有什么办法来检查一个twitter应用是否在后台运行
- 30. 有没有办法检查(文件)句柄是否有效?
-1这是行不通的。条件会使函数不能再次运行的唯一方法是,如果从函数内部调用它。只要该函数运行,其他代码就不会在浏览器中运行。 – Guffa 2012-03-15 23:44:48
不正确。 AJAX功能可以并且与其他功能同时运行。 – pete 2012-03-15 23:58:47
这完全错了。没有与其他功能同时运行的特殊“AJAX”功能。 Javascript是单线程的;任何时候只有一个函数在运行。 – Guffa 2012-03-16 00:21:45