- 2010-01-27 (水) 16:40
- JavaScript | jQuery
っていう JavaScript を書いたとき、 func1 の処理が完全に終わってから func2 の処理を行いたい。 そんなことを考えてたわけなのですが。 どうにかしてうまいこと処理したい、そう思って調べてたら、
動的スクリプトローディング(さんざん既出だと思うけど|IT戦記
こんな記事を発見。 jQuery が完全に読み込まれたのを確認してから実際の処理を行う、というものなのだったので一部拝借。
$(function(){
func1();
//func2();
//setTimeout で遅延処理
setTimeout(function(){
if(!func1()) setTimeout(arguments.callee, 100);
else func2();
}, 100);
});
var
func1 = function(){
//処理 1
return true; //処理が終わったら true を返す
},
func2 = function(){
//処理 2
};
こんな感じにしてみました。 各処理の解説(amachang氏のスクリプトの方ですが)は、 遅延ロードでJavaScriptのお勉強|Born Neet こっちのほうが詳しいので割愛します。
で、やったーできたーとか思ってたら、 Safari3 だけ jQuery が undefined になる。 ならばと思ってもう一回遅延処理をさせてみる。
(function(){
setTimeout(function(){
if(!window.jQuery) setTimeout(arguments.callee, 100);
else {
$(function(){
func1();
//func2();
//setTimeout で遅延処理
setTimeout(function(){
if(!func1()) setTimeout(arguments.callee, 100);
else func2();
}, 100);
});
}
},100);
})();
var
func1 = function(){
//処理 1
return true; //処理が終わったら true を返す
},
func2 = function(){
//処理 2
};
ってやってみる。 今度は本家スクリプトの処理部分をまんま持ってきた感じになりました。 で、最初の setTimeou の関数部分が長くなってちょっと嫌だったので、 試しにこうしてみたところ問題なく動いた。
(function(){
setTimeout(function(){
if(!window.jQuery) setTimeout(arguments.callee, 100);
else $(main());
},100);
})();
var
func1 = function(){
//処理 1
return true; //処理が終わったら true を返す
},
func2 = function(){
//処理 2
},
main = function(){
func1();
//func2();
//setTimeout で遅延処理
setTimeout(function(){
if(!func1()) setTimeout(arguments.callee, 100);
else func2();
}, 100);
};
わーい、すっきり! $(function(){}); の中身って無名関数じゃなくても良いんだなぁと言う発見つき。
そんなこんなで jQuery がちゃんと読み込まれる → fnuc1 実行 → func2 実行 っていう流れで処理できるようになりました。
ところでこういう処理って「遅延処理」って言ってしまっていいんですかね。 適当な言葉が思いつかなかった上、他でもそんな感じで書いてるのが多かったので使ったのですが。 まぁ、間違ってたら書きなおします。
- Newer: OAuth の API の URL
- Older: 【jQuery】jQuery1.4リリース
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://unolabo.boo.jp/archives/2010/01/27-jquery%e3%81%ae%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e5%be%85%e3%81%a1%e3%81%a8%e3%81%8b%e9%96%a2%e6%95%b0%e3%81%ae%e5%87%a6%e7%90%86%e5%be%85%e3%81%a1%e3%81%a8%e3%81%8b%e9%81%85%e5%bb%b6%e5%87%a6.html/trackback
- Listed below are links to weblogs that reference
- 【JavaScript】jQueryの読み込み待ちとか関数の処理待ちとか遅延処理っぽいこと from うのらぼ。