1

我有一个在几乎所有浏览器上都使用 jQuery UI 选项卡的完美工作网页 - 它不适用于 IE7。

我所有的代码都是由 asp 文件呈现的——包括数据,包括 JavaScript 和 CSS,还有创建选项卡的代码。

我的第一个问题是,在 IE7 中,我在警报框中收到以下消息:

Internet Explorer 无法打开 Internet 站点。

几个小时后,我找到了一种使用 脚本标签的defer 属性来解决这个问题的方法。

现在,我收到以下错误:

对象不支持属性或方法“选项卡”

当我检查 jQuery 和 jQuery UI 版本时(看看它们是否被加载),我只得到 jQuery 的结果。

我想,没有加载 jQuery UI 或者创建选项卡的脚本在加载库之前执行,尽管它应该在文档准备好时执行。

有没有人面临同样的问题?

4

2 回答 2

4

加载 jQuery UI 的脚本标签依赖于在加载 jQuery UI 脚本之前运行 jQuery 的脚本标签中的 JavaScript 。如果您defer在 jQuery 脚本标签上使用该属性,则会引入竞争条件,最终可能会导致 jQuery UI 首先加载并失败(而不是添加tabsjQuery.fn)。因此,使用tabs函数的代码是否在ready回调中并不重要。

您根本不需要使用defer,因此我建议不要使用defer和发布有关您的原始问题的问题,而不是尝试解决此问题,因为添加defer不应该是解决方案。

但是,如果您想继续使用defer,请删除您的 jQuery UI 脚本标签,并将其放在页面底部,就在结束</body>标签之前:

<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>

这将等待 jQuery 被加载,然后加载 jQuery UI 脚本,然后触发您的代码。

或者,当然,只需创建您自己的包含 jQuery 和 jQuery UI 的脚本文件,然后使用您的代码tabs,然后加载该文件。

于 2012-12-06T09:30:13.160 回答
-1

I had this problem too and I found that I'd saved the "jquery-ui.css" content instead of "jquery-ui.js" content.
check it up if you are using correct files?

于 2014-07-27T11:49:02.257 回答