我有一个完美的网页,几乎在所有浏览器上都使用jQuery UI标签 - 它不适用于IE7。
我的所有代码都是由asp文件呈现的 - 包含数据,包含JavaScript和CSS,并且还有创建选项卡的代码。
我的第一个问题是,在IE7中,我在警告框中收到以下消息:
Internet Explorer无法打开Internet站点。
几个小时后,我找到了一种方法来解决这个问题,使用脚本标记的defer Attribute。
现在,我收到以下错误:
对象不支持属性或方法'tabs'
当我检查jQuery和jQuery UI版本(看看它们是否被编码)时,我只得到了jQuery的结果。
我想,没有加载jQuery UI,或者在加载库之前执行创建选项卡的脚本,尽管它应该在文档就绪时执行。
有没有人面临同样的问题?
答案 0 :(得分:4)
脚本标记加载jQuery UI依赖于jQuery脚本加载jQuery UI脚本之前已经运行的脚本标记中的JavaScript。如果在jQuery脚本标记上使用defer
属性,则会引入竞争条件,最终可能会首先加载jQuery UI并失败(不将tabs
添加到jQuery.fn
)。因此,使用 tabs
函数的代码在ready
回调中并不重要。
您根本不需要使用defer
,因此我建议不要使用defer
并发布有关原始问题的问题,而不是尝试解决此问题,因为添加{{ 1}}不应该是它的解决方案。
如果您想继续使用defer
,请删除您的jQuery UI脚本标记,然后将其放在页面底部,就在结束defer
标记之前:
</body>
等待加载jQuery,然后加载jQuery UI脚本,然后触发你的代码。
当然,只需创建自己的脚本文件,其中包含jQuery和jQuery UI,然后使用<script>
(function() {
var waitingForUI = false;
loadScripts();
function loadScripts() {
if (window.jQuery && window.jQuery.fn.tabs) {
// Both jQuery and jQuery UI are loaded.
// ==> your code using `tabs` here <==
}
else {
if (window.jQuery) {
// jQuery is loaded but not jQuery UI, go get it
// unless we've already started loading it
if (!waitingForUI) {
waitingForUI = true;
jQuery.getScript("/your/path/to/jquery/ui");
}
}
setTimeout(loadScripts, 10);
}
}
})();
</script>
</body>
编写代码,并加载该文件。
答案 1 :(得分:-1)
我也有这个问题,我发现我保存了“jquery-ui.css”内容,而不是“jquery-ui.js”内容。
如果您使用的是正确的文件,请检查它?