Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 - Fatal编程技术网

Javascript jQuery对此有何反应?

Javascript jQuery对此有何反应?,javascript,jquery,Javascript,Jquery,假设我们对某个div有一个onClick事件,但在此之前,我们需要用jQuery完成一个大的计算,大约需要3秒钟,而jQuery当前正忙,所以它无法识别我的事件调用 因此,1秒钟过去了,我点击这个框。什么都没发生?2秒。什么都没发生?3秒,jQuery完成当前任务。我的onclickjQuery事件起作用,框消失 问题是,; 在这种情况下,jQuery会做什么?自动创建线程以立即执行onclick事件?排队等候?(因此,当任务完成时,它将执行我的3次单击,因此有3次事件调用)完全忽略前2次调用?

假设我们对某个
div
有一个
onClick
事件,但在此之前,我们需要用jQuery完成一个大的计算,大约需要3秒钟,而jQuery当前正忙,所以它无法识别我的事件调用

因此,1秒钟过去了,我点击这个框。什么都没发生?2秒。什么都没发生?3秒,jQuery完成当前任务。我的
onclick
jQuery事件起作用,框消失

问题是,;
在这种情况下,jQuery会做什么?自动创建线程以立即执行onclick事件?排队等候?(因此,当任务完成时,它将执行我的3次单击,因此有3次事件调用)完全忽略前2次调用?另外,我应该做些什么来避免这种问题呢?

JavaScript的功能就像它是单线程的一样。据我所知,有些浏览器在实际实现上有所不同,但编写脚本时,希望它们能够线性执行,这是安全的

我想你的浏览器会在被阻止的UI中排队等待点击,但这取决于浏览器决定如何处理这种情况。(My Chrome在被阻止的UI期间排队等待单击事件)

也就是说,在较新的浏览器中实现了一个很酷的功能:


它允许您在后台执行昂贵/长时间的操作,而不会阻塞UI。如果您的脚本将在大多数新浏览器上运行,那么可能值得深入研究此功能。奖励:那篇文章是由jQuery的创始人写的!=)

JavaScript的功能就像它是单线程的一样。据我所知,有些浏览器在实际实现上有所不同,但编写脚本时,希望它们能够线性执行,这是安全的

我想你的浏览器会在被阻止的UI中排队等待点击,但这取决于浏览器决定如何处理这种情况。(My Chrome在被阻止的UI期间排队等待单击事件)

也就是说,在较新的浏览器中实现了一个很酷的功能:


它允许您在后台执行昂贵/长时间的操作,而不会阻塞UI。如果您的脚本将在大多数新浏览器上运行,那么可能值得深入研究此功能。奖励:那篇文章是由jQuery的创始人写的!=)

您可以使用加载栏或页面刷新元素通知用户后台正在发生某些事情

您可以使用加载栏或页面刷新元素通知用户后台正在发生某些事情

看一看。在Chrome上,正如Shad所说,点击会排队,并且在计算完成后处理事件。一件奇怪的事是,在大计算之前

E('status').innerHTML = "Status: started";
直到后来才被处决。另一件令人惊讶的事情是,通过重复10000或100000次几个操作,使整个浏览器挂起是多么容易

如果服务器端解决方案不可行,解决方案可以是将计算分解为更小的操作批,并以几毫秒的间隔一次执行一批操作,以允许代码的其他部分操作。与此同时,您可能需要一条“请稍候”消息。

请查看。在Chrome上,正如Shad所说,点击会排队,并且在计算完成后处理事件。一件奇怪的事是,在大计算之前

E('status').innerHTML = "Status: started";
直到后来才被处决。另一件令人惊讶的事情是,通过重复10000或100000次几个操作,使整个浏览器挂起是多么容易


如果服务器端解决方案不可行,解决方案可以是将计算分解为更小的操作批,并以几毫秒的间隔一次执行一批操作,以允许代码的其他部分操作。与此同时,您可能需要一条“请等待”消息。

这是javascript,它没有反应,只有一个线程,它按照收到的顺序执行操作。如果一个计算需要三秒钟,开发人员可能应该在他的业余时间找到其他东西来做。为什么要问你是否可以自己尝试呢?如果您发现这种行为并不是您所需要的,那么请回到这里,在通过AJAX调用的页面中实现您的长函数,以避免出现web页面freezing@sdespont:只有在服务器端实际可行的情况下,才能这样做。对于许多任务来说,在服务器端执行是不切实际的。它是javascript,没有反应,只有一个线程,按照接收的顺序执行任务。如果一个计算需要三秒钟,开发人员可能应该在他的业余时间找到其他东西来做。为什么要问你是否可以自己尝试呢?如果您发现这种行为并不是您所需要的,那么请回到这里,在通过AJAX调用的页面中实现您的长函数,以避免出现web页面freezing@sdespont:只有在服务器端实际可行的情况下,才能这样做。对于许多任务,在服务器端执行是不切实际的。