是什么导致$ .active变量减少?

时间:2016-02-08 20:55:16

标签: jquery ajax

我正在调试一个问题,即在发出动态加载iFrame的AJAX请求之后,$ .active值没有减少(这是在页面已经加载之后)。以下是加载iFrame的源代码:

        function initializeiFrame(id, frameborder, iFrameSrc) {
           var iFrameSelector = $('<iframe id="' + id + 'iFrame" name="' + id + '" allowtransparency="true" scrolling="no" frameborder="' + frameborder + '" style="display: none; top: 0px; left: 0px; position: absolute">&nbsp;</iframe>');
           iFrameSelector.appendTo("#hiddenIFrameContainer");
           iFrameSelector.attr('src', iFrameSrc);
           return iFrameSelector;
        }

        iFrameSelector = initializeiFrame(id, frameborder, iFrameSrc);

        iFrameSelector.load(function() {
           doWorkAfteriFrameLoad(...);
        });

此代码在我第一次加载iFrame时工作正常。第二次调用此代码(对于不同的iFrame但重用相同的代码),它会锁定,因为在我们的应用程序中,我们在允许发送AJAX请求之前检查$ .active值(我们限制请求的数量)。显然,在动态加载iFrame时,$ .active值不会递减。因此,下次加载一个时,$ .active值太高,并且消息永远不会发送到服务器。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果有人遇到类似的问题,我想出来了(在敲了两天之后)。我在事先没有调用event.preventDefault()的事件处理程序中执行此工作。显然,不包括这个代码有一个非常令人讨厌的副作用,双倍增加$ .active变量。我仍然不知道它到底能做到这一点,因为即使我正在调试jQuery本身,我也永远不会看到它改为2.如果我添加了console.log或调试器语句,问题就会消失。所以在我看来这是一种非常奇怪的种族状况。无论如何,这就是我修复它的方式,以便其他人可能不必经历我所做的可怕的痛苦。