为什么jQuery.attr()方法在我的'click'事件中不起作用?

时间:2011-12-16 09:12:22

标签: javascript jquery

我有以下原型代码,可在单击按钮时触发进程:

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()执行。

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:5)

当你没有调试时,它可能正在执行。

我的猜测是processQueue()会立即返回,因此代码会立即转到finally块,并且会立即重新启用该组件,因此您实际上并未看到它。如果您进行调试,则会阻止执行,并且您可以看到该组件被禁用。

什么是processQueue正在做什么?如果它正在做一些Ajax工作,请记住,默认情况下,Ajax请求是异步执行的。也许你需要将一个回调函数传递给processQueue,所以你只能在完成工作时重新启用#queue-process?