我正在制作一个书签并使用jQuery(使用noConflict)。我需要等待jQuery加载,以执行所有jQuery代码。
我知道我可以用typeof $
查看jQuery,但我实际上更多的是寻找一个事件处理程序。现在我只是使用setTimeout
延迟1秒,因为jQuery是经过精确加载的。
我觉得这不是一个好的解决方案。它不是干净的代码,依赖于jQuery加载1s。
还有其他方法可以承受这个吗?
答案 0 :(得分:5)
仅仅是为了记录,完整性以及那些不知道的人:没有事件处理程序,一个很好的选择是每隔X个时间轮询一次jQuery。例如:
function is_jquery_here(){
setTimeout(function(){
if(window.jQuery){
my_jquery_code_here();
} else {
is_jquery_here();
}
}, 300);
}
is_jquery_here();
答案 1 :(得分:3)
由于您说是动态附加,因此您可以使用onload
:
var elem = document.createElement('script');
elem.onload = function() {
// script is loaded, you can now do things with jQuery
};
elem.src = 'path to jquery';
document.getElementsByTagName('head')[0].appendChild(elem);
答案 2 :(得分:2)
并非每个浏览器都支持.onload
脚本元素,因此如果您需要跨浏览器兼容性,请同时使用onreadystatechange
:
function load( src, callback )
{
var s,r;
s = document.createElement('script');
s.type = 'text/javascript';
s.src = src;
s.onload = s.onreadystatechange = function(){
if ( !r && ( !this.readyState || this.readyState == 'complete' ) )
{
r = 1;
callback();
}
};
document.body.appendChild(s);
}
答案 3 :(得分:0)
如果页面中有jQuery脚本,而您只想确保首先加载了该脚本,那么我强烈建议您使用该脚本
window.onload = function() {
//.....your jquery code....
};
答案 4 :(得分:-3)
$(function() {
// Code for on docload here
});