暂停JQuery序列,直到加载所有iframe

时间:2014-11-19 00:13:54

标签: jquery

简单的问题我相信,但我无法想象我该怎么做?

m.find("iframe[src=''][data-src]").each(function() {
    $(this).load(function() {
        // something here
    }).attr("src", $(this).attr("data-src"));
});
// how to pause here until all 'load's are fired?
m.css("visibility", "visible");

3 个答案:

答案 0 :(得分:1)

这是基于我使用的方法的东西。您可能希望添加更多错误处理,以防iframe未加载或没有任何iframe(如果可能的话)。

var deferred = $.Deferred(),
    $iframes = m.find("iframe[src=''][data-src]"),
    count = $iframes.length;

$iframes.each(function() {
    $(this).load(function() {
        // something here
        if(--count == 0) {
           deferred.resolve(); // We have received all the expected loads
        }
    }).attr("src", $(this).attr("data-src"));
});

deferred.promise().done(function() {
                            m.css("visibility", "visible");
                        });

答案 1 :(得分:1)

尝试

var el = m.find("iframe[src][data-src]")
, len = el.length
, t = 0;
el.each(function () {
    $(this).load(function (e) {
        ++t;
        if (t === len) {
            el.css("visibility", "visible")
        }
    }).attr("src", $(this).attr("data-src"));
});

jsfiddle http://jsfiddle.net/guest271314/1mz29r9u/

答案 2 :(得分:-1)

尝试使用.stop()函数!