什么相当于Thread.sleep()JavaScript中的Java ?
这看起来很傻,但我找不到如何使用不涉及某些服务器端请求的jQuery进行异步函数调用.我有一个缓慢的函数,遍历很多DOM元素,我希望浏览器在此函数运行时不会冻结.我想在调用慢速函数之前显示一个小指标,然后当慢速函数返回时,我想隐藏指标.我有以下内容:
$('form#filter', parentNode).submit(function() {
var form = $(this);
indicator.show();
var textField = $('input#query', form);
var query = jQuery.trim(textField.val());
var re = new RegExp(query, "i");
slowFunctionCall(); // want this to happen asynchronously; all client-side
indicator.hide();
return false;
});
Run Code Online (Sandbox Code Playgroud)
目前我提交表格并且指标未显示,浏览器冻结,然后slowFunctionCall完成.
编辑:我使用了Vivin的答案,特别是Sitepoint链接来获得以下解决方案:
var indicator = $('#tagFilter_loading', parentNode);
indicator.hide();
var spans = $('div#filterResults span', parentNode);
var textField = $('input#query', parentNode);
var timer = undefined, processor = undefined;
var i=0, limit=spans.length, busy=false;
var filterTags = function() {
i …Run Code Online (Sandbox Code Playgroud) 假设我加载了一些我将来会知道将要调用window.flashReady并将设置的Flash影片window.flashReadyTriggered = true.
现在我有一段代码,我想在Flash准备就绪时执行.如果window.flashReady已经被调用,我希望它立即执行它,如果尚未调用它我想把它作为回调window.flashReady.天真的方法是这样的:
if(window.flashReadyTriggered) {
block();
} else {
window.flashReady = block;
}
Run Code Online (Sandbox Code Playgroud)
因此我基于此的关注是,if条件中的表达式被评估为false,但之后block()可以执行,window.flashReady由外部Flash触发.因此,block永远不会被称为.
是否有更好的设计模式来实现我想要的更高级别目标(例如,手动调用flashReady回调)?如果没有,我是安全的,还是我应该做的其他事情?
在所有其他人都这样做之后,是否可以执行一个jQuery ready块.
我在我的母版页中有这个...
<script type="text/javascript">
$(document).ready(function()
{
$("input[type='text']:enabled:first", document.forms[0]).focus().select();
});
</script>
Run Code Online (Sandbox Code Playgroud)
这在我的其他页面之一......
<script type="text/javascript">
$(document).ready(function()
{
$('textarea.message-body').wysiwyg();
});
</script>
Run Code Online (Sandbox Code Playgroud)
我看到的问题是第一个块在第二个块之前执行,这导致tab键出现问题.发生的事情是,当我按Tab键时,键盘焦点会转到浏览器中的地址栏.我已经稍微更改了代码以在我的母版页中显示...
<script type="text/javascript">
$(document).ready(function()
{
var bodies = $('textarea.message-body');
if (bodies.length > 0)
{
bodies.wysiwyg();
}
$("input[type='text']:enabled:first", document.forms[0]).focus().select();
});
</script>
Run Code Online (Sandbox Code Playgroud)
并完全取消另一个准备好的块.这样做可以使Tab键正常工作,并将焦点设置到我的textarea上.
我宁愿在母版页中没有特定于页面的代码.
那么,有没有办法让我的文本框聚焦代码在wysiwyg代码之后运行?
在JavaScript中增量是一个原子操作吗?如果一个线程正在访问++i;,同时另一个线程
开始访问该操作会有任何问题吗?
IE6中的JavaScript多线程是否可行?
有没有第三方图书馆?
我需要让一段代码始终独立于其他代码运行.有没有办法在javascript中创建一个线程来运行这个功能?
- 为什么setTimeout对我不起作用
我尝试过,但它只运行一次.如果我以递归方式调用该函数,它会在一段时间后抛出"过多的递归"错误.我需要每100毫秒运行一次(这是与嵌入式系统的通信).
- 如你所知,这里有一些代码
function update(v2) {
// I removed the use of v2 here for simplicity
dump("update\n"); // this will just print the string
setTimeout(new function() { update(v2); }, 100); // this try doesn't work
}
update(this.v);
Run Code Online (Sandbox Code Playgroud)
它抛出"过多的递归".
可能重复:
为什么JavaScript不支持多线程?
有没有办法产生新的线程来运行任务(网络内容或一些繁重的计算)并行工作?
javascript ×9
jquery ×2
asynchronous ×1
atomic ×1
browser ×1
forms ×1
function ×1
html5 ×1
indexeddb ×1
java ×1