单击按钮时,我具有以下原型(prototype)代码来触发过程:
jQuery("#queue-process").click(function() {
jQuery("#queue-process").attr("disabled", "disabled");
try {
processQueue();
} catch (e) {
console.log(e.message);
} finally {
jQuery("#queue-process").removeAttr("disabled");
}
});
始终会调用
processQueue
函数,但是仅当我在Chrome JavaScript控制台中调试匿名函数时才调用attr("disabled", "disabled")
,即,如果我在该行上放置一个断点并单步执行,则它可以工作,但在调试器外部仅processQueue()
执行。为什么会这样呢?
最佳答案
当您也不调试时,它可能正在执行。
我的猜测是processQueue()立即返回,因此代码立即转到了finally块,并且立即重新启用了该组件,因此您实际上看不到它。如果进行调试,则会阻止执行,并且可以看到该组件已被禁用。
processQueue到底在做什么?如果正在执行一些Ajax工作,请记住,默认情况下,Ajax请求是异步执行的。也许您需要将回调函数传递给processQueue,所以仅在工作完成时重新启用#queue-process?