2013-04-12 120 views
2

同步使用jQuery加载函数的最佳方法是什么?jQuery .load(函数)同步

我需要加载图像,但不能执行下一行代码,直到该图像已加载。

我可以循环一个变量,直到加载完成,但想知道是否有更好的方法来做到这一点。

var img = jQuery('<img src="' + url + '"/>').load(function() {     

      }); 
    //Run code here once img load has comlpeted.            
+1

这有你需要的东西:http://stackoverflow.com/questions/5364166/how-to-load-page-synchronously-using-jquery – tymeJV

回答

7

据我所知,在load事件总是会触发异步,但如果图像(在一些浏览器)已经被缓存。唯一可靠的解决方案是像你一样把代码放在回调中。但是,为确保load处理程序将始终在所有浏览器中被触发,即使图像被缓存,请确保在之前添加处理程序,设置图像的src属性。

1
var img = jQuery('<img src="' + url + '"/>').load(runner); 
function runner() { 
    //run code here once image is loaded 
} 
+0

很好的抓住plalx – zarazan

4

您还可以使用回调函数来获得同步行为 -

var result = $('#main-container').load('html/Welcomeform.html', 
       function() { 
        if($("textarea").find("#mail-id")){ 
         $("textarea#mail-id").val(email_id); 
        } 
        }); 
0

我来到这里寻找一个类似的解决方案。从读取中,使用.load是不可能的,您需要使用AJAX请求,正如问题注释所指出的那样。

在我的情况下,我需要加载一个html文件,我添加了一个转换来更改内容。旧内容在转换后的新内容之前显示,即使我在加载回调中显示内容。

var main = $("#main"); 
    main.load("about.html", displaySection); 

function displaySection() { 
    main.show('blind'); 
} 

我的解决方法是运行显示加载的内容在超时函数内的延迟参数为200的过渡。

var main = $("#main"); 
    main.load("about.html", displaySection); 

function displaySection() { 
    setTimeout(function() { 
     main.show('blind'); 
    }, 200); 
} 

的问题可能是,如果连接是缓慢,在新页面的时间超过200毫秒加载,但在这种情况下,我不知道该回调将在稍后推出。我不明白为什么在没有超时的情况下不工作,我感觉很难看,但它解决了我的问题......以防万一其他人没有考虑到这种可能性。