Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在javascript/jquery中停止执行吗?_Javascript_Jquery_Jquery Animate - Fatal编程技术网

可以在javascript/jquery中停止执行吗?

可以在javascript/jquery中停止执行吗?,javascript,jquery,jquery-animate,Javascript,Jquery,Jquery Animate,基本上,我希望能够将任何命令包装在$.holdTillFinished()方法中,该方法在指定的方法/jquery动画完成执行之前不允许继续执行 我怀疑这在javascript中可能很困难甚至不可能,但我希望有人会知道 我不想听到如何将回调传递到动画中,使其在完成时运行,或者其他类似的事情 我真的很想知道这样的事情是否可能,以及如何去做 如果有人知道一个很好的队列插件,它能够对用户定义的方法和动画进行排队,那么这也很酷。我真正想要的是一种延迟执行的方法。(同时仍然允许动画运行)您可能正在寻找 但

基本上,我希望能够将任何命令包装在$.holdTillFinished()方法中,该方法在指定的方法/jquery动画完成执行之前不允许继续执行

我怀疑这在javascript中可能很困难甚至不可能,但我希望有人会知道

我不想听到如何将回调传递到动画中,使其在完成时运行,或者其他类似的事情

我真的很想知道这样的事情是否可能,以及如何去做


如果有人知道一个很好的队列插件,它能够对用户定义的方法和动画进行排队,那么这也很酷。我真正想要的是一种延迟执行的方法。(同时仍然允许动画运行)

您可能正在寻找

但是如果你想寻找一种更普遍的方式来拖延时间,我以前用过这个片段(我没有写它,所以所有的功劳都归原作者):

我怀疑这在javascript中可能是困难的,甚至是不可能的

你的怀疑是对的。动画、用户输入循环和'async=true'XMLHttpRequests等方法必须将控制权返回到浏览器才能继续,并且在返回每个嵌套级别的函数调用之前,浏览器无法恢复控制权。这意味着您的所有代码,包括调用“holdTillFinished()”的函数都必须展开:因此“holdTillFinished()”是不可能的

其他语言具有流控制功能,允许您以调用方认为是同步的方式有效地执行异步进程,反之亦然。最著名的是和。JavaScript不具备这些功能,因此您最好能做的就是超时和回调


(将回调定义为内联函数以获得对闭包中封闭函数变量的访问权至少可以减轻一些痛苦;其他一些语言必须开始将封闭状态的每一位包装到对象的属性中才能实现这一点。)

您可以使用发布/订阅体系结构来实现您想要的功能。我不知道你到底想要实现什么,我猜这对你来说是可行的


其工作方式是将函数的完成视为一个事件,您可以侦听该事件并将处理程序附加到该事件,虽然我相信还有其他的。

它会根据情况进行保护,但通常情况下,在调用AJAX或javascript中执行任何循环时,都需要显示处理图像。在这种情况下,我在循环中调用AJAX,以便用户显示处理图像。我做了一个诡计。调用此函数时,我放置了一个取消作业的按钮。我将一个全局变量设置为“cancelJob”,并在循环中检查此全局变量。如果为真,则运行返回false,脚本将停止

var cancelJob = false;
foreach(){
   if(cancelJob == true)
       return false;
}

function cancelButtonPress(){
   cancelJob = true;
}

这不会延迟执行,直到函数结束。这会将队列中的执行延迟一个我正在设置的时间限制。我不知道运行任何给定函数需要多长时间,我也不必猜测。不过这比什么都不运行要好。但这真的不是我想要的。@quirty:我想你想要排队和退队(已经在下面被你建议并驳回了)。您可以将任意方法与动画一起排队,它们将按顺序执行。如果这不是你要问的问题,那么你能用一个你想做什么的例子来澄清你的问题吗?我没有看到一个适用于函数的队列。我的意思是,如果我将一个动画,然后是一个函数,然后是一个动画传递到队列中,那么当这些动画正在播放时,函数不应该执行。此外,我不想指定函数执行所需的时间。但我真正想要的是一个包装器,它可以停止所有javascript,直到我传递给它的函数/动画使用操作系统支持,几乎所有现代(非浏览器)语言都为您提供线程。至少可以在Haskell、ML和Scheme以及其他语言(例如Stackless Python)的一些扩展中找到Continuations/coroutines;C语言中有一些原语可以用来构建延续。当然,在浏览器世界中,你会陷入困境:除了JavaScript,只有VBScript,更糟糕的是!JavaScript 1.7(在Firefox 2中)为您提供了Python风格的生成器,这是一种有限的延续形式,在这里并不能真正帮助您。我的意思是“什么语言必须开始包装对象属性中的每一个封闭状态才能实现这一点?”。没有一流函数和闭包的语言,如C[++]还有Java。(Java的匿名内联类几乎可以做到这一点,因为它们可以读取但不能写入外部函数变量。)这正是我不想要的。我传递给相关函数/动画的回调
var cancelJob = false;
foreach(){
   if(cancelJob == true)
       return false;
}

function cancelButtonPress(){
   cancelJob = true;
}