Javascript 如何立即强制执行.trigger(…)?
我有一个按钮,可以进行一些繁重的计算,在计算步骤之间,我想刷新页面 JavaScript:Javascript 如何立即强制执行.trigger(…)?,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,我有一个按钮,可以进行一些繁重的计算,在计算步骤之间,我想刷新页面 JavaScript: .on('click', function() { // compute something jQuery('#page') .trigger('pageshow') ; // compute something jQuery('#page') .trigger('pageshow') ; // compute
.on('click', function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
// compute something
jQuery('#page')
.trigger('pageshow')
;
// compute something
}
.on('click', function() {
// compute something
window.setTimeout(function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
}, 1);
}, 1);
}
var functionFirst = function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(functionSecond, 1);
};
var functionSecond = function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(functionThird, 1);
};
var functionThird = function() {
// compute something
jQuery('#idJqGame')
.trigger('pageshow')
;
};
window.setTimeout(functionFirst, 1);
遗憾的是,这不起作用,因为pageshow
-事件是在.on(单击)
完成后触发的
有没有办法立即强制执行.trigger(…)
JavaScript-丑陋的解决方案:
.on('click', function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
// compute something
jQuery('#page')
.trigger('pageshow')
;
// compute something
}
.on('click', function() {
// compute something
window.setTimeout(function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
}, 1);
}, 1);
}
var functionFirst = function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(functionSecond, 1);
};
var functionSecond = function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(functionThird, 1);
};
var functionThird = function() {
// compute something
jQuery('#idJqGame')
.trigger('pageshow')
;
};
window.setTimeout(functionFirst, 1);
丑陋的解决方案会奏效,但实际上相当丑陋。还必须执行检查('click',…)-事件在触发时是否完全计算
JavaScript-更漂亮但仍然丑陋的解决方案:
.on('click', function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
// compute something
jQuery('#page')
.trigger('pageshow')
;
// compute something
}
.on('click', function() {
// compute something
window.setTimeout(function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
}, 1);
}, 1);
}
var functionFirst = function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(functionSecond, 1);
};
var functionSecond = function() {
// compute something
jQuery('#page')
.trigger('pageshow')
;
window.setTimeout(functionThird, 1);
};
var functionThird = function() {
// compute something
jQuery('#idJqGame')
.trigger('pageshow')
;
};
window.setTimeout(functionFirst, 1);
更漂亮,但仍然丑陋的解决方案基本上与丑陋的解决方案做相同的事情-它只是更容易阅读,因此我目前正在使用这个解决方案。JavaScript解释器是围绕“事件循环”构建的。由于这种设计,并且由于解释器在单个线程中运行,所有事件都按顺序处理 如果在应用程序设计中可能,请尝试定期调用页面刷新而不是事件 如果你能保证你的应用程序只能在现代浏览器上运行,另一个选择是把“繁重的计算”转移到一个网络工作者身上。更多信息请点击此处: 编辑1: 根据的“嵌套事件”一节,如果您使用本机浏览器功能对事件进行排队,则可能实现您想要的结果 另一个优雅的解决方案是利用事件的顺序处理。将“繁重计算”移动到事件处理程序。然后交替地推送“compute”和“pageshow”事件,以便交替地调用它们。 也就是说,我担心这会导致页面看起来没有响应,因为正常的DOM事件也会在之后排队 编辑2:
刚刚发现:可能会有帮助。很抱歉,丑陋的解决方案是最好的。
它可以被美化,但底线是你需要把你的代码分成更小的块,以便有可能控制它们 window.setTimeout(jQuery('#page').trigger('pageshow'),1)有帮助吗?在settimeout中传递的代码将从代码流执行中删除。遗憾的是,它不会这样工作。我已经添加了一个丑陋的解决方案,使用.setTimeout(…)它将如何工作-但这只是一个丑陋的方式。谢谢你的回复-不幸的是,我已经知道你提到的所有事情,我不能选择定期页面刷新,也不能选择网络工作者。@SimonN。我的编辑是否为您带来了新的选项?您试图实现的内容与JavaScript的内部功能密切相关…再次感谢-dispatchEvent只能与createEvent结合使用,因为我不知道如何创建pageshow事件,所以我有点卡住了。创建自己的计算事件也不是一个选项,因为我仍然需要防止多次单击。最后,jQuery.queue(…)应该只用于视觉效果。这真是太可悲了——至少现在我知道没有“好”的解决方案。谢谢大家!