我在SO中看到了类似的问题,有人想做同样的事情。不同的情况是我有这个轻量级脚本,它监听事件冒泡到文档根目录的顶部,我故意想把它放在页面的顶部,我不想把它包装在$(document).ready()中。它看起来像这样:
<html>
<head>
<script>
document.documentElement.onclick = function (e) {
//$.ajax call using jQuery. Possible that jQuery is not loaded when page is not completely loaded
}
</script>
</head>
然后在页面底部附近我包含jQuery:
<body>
<script src="./jQuery.js"></script>
</body>
</html>
正如您在<head>
上看到的那样,当我使用$.ajax
对某个地方进行ajax调用时,jQuery可能尚未加载,因此它可能会抛出$ is undefined error
当有人点击DOM上的某些内容时,jQuery尚未加载。我的解决方法可能是使用settimeout希望稍后加载jquery并且代码工作如下:
if (typeof $ === 'undefined'){
setTimeout(doAJAXJquery, 50);
}else{
$.ajax(//blablabla) //jQuery loaded and ready to use!!
}
但这是一个非常肮脏的黑客。我怎么知道jQuery何时完成加载? 50ms
我放在那里只有我自己组成的任意值。当然,如果jquery尚未加载并且已经过了50ms,它仍然无法工作。
有没有更好的解决方法,所以当jQuery未定义时,它会在稍后的某个时间重试,或者在jQuery准备就绪后执行ajax执行ajax的函数?感谢。
答案 0 :(得分:1)
怎么样
<head>
<script type="text/javascript">
var init = function(){
document.documentElement.onclick = function (e) {
//$.ajax call using jQuery. Possible that jQuery is not loaded when page is not completely loaded
}
}
</script>
</head>
<body>
<script src="./jQuery.js"></script>
<script type="text/javascript">
init();
</script>
</body>
答案 1 :(得分:1)
如果你想执行等待jQuery加载的函数列表(或者'kick'事件),你可以创建自己的'ready'函数:))
var runList = new Array(), timer = setInterval(function(){
if (typeof(jQuery) != 'undefined')
{
clearInterval(timer);
if (runList.length>0) for(var i in runList) runList[i]();
}
}, 50);
runList.push(function(){alert(1);});
runList.push(function(){alert(2);});
var jQuery = 1;