1

ほとんどすべてのブラウザーで jQuery UI タブを使用して完全に機能する Web ページがありますが、IE7 では機能しません。

すべてのコードは asp ファイルでレンダリングされます。データが含まれ、JavaScript と CSS が含まれ、タブを作成するコードもあります。

私の最初の問題は、IE7 でアラート ボックスに次のメッセージが表示されたことです。

Internet Explorer でインターネット サイトを開くことができません。

数時間後 、script タグのdefer 属性を使用してこれを修正する方法を見つけました。

今、次のエラーが表示されます。

オブジェクトはプロパティまたはメソッド 'tabs' をサポートしていません

jQuery と jQuery UI のバージョンをチェックすると (ロードされているかどうかを確認するため)、jQuery の結果のみが得られます。

ドキュメントの準備ができたら実行する必要がありますが、jQuery UI が読み込まれていないか、ライブラリが読み込まれる前にタブを作成するスクリプトが実行されていると思います。

誰も同じ問題に直面していますか?

4

2 に答える 2

4

jQuery UIをロードするスクリプトタグは、jQueryUIスクリプトがロードされる前に実行されたjQueryのスクリプトタグのJavaScriptに依存しています。deferjQueryスクリプトタグで属性を使用すると、競合状態が発生し、jQuery UIが最初に読み込まれて失敗する(に追加tabsされないjQuery.fn)可能性があります。したがって、関数を使用するコードがコールバックにあるかどうかは関係ありません。tabsready

を使用する必要はまったくないのでdefer、これを修正する代わりにdefer、元の問題を使用して質問を投稿しないことをお勧めします。追加deferすることで解決できるわけではないからです。

ただし、引き続き使用する場合は、jQuery UIスクリプトタグを削除し、代わりにページの下部、終了タグdeferの直前に配置します。</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、その1つのファイルをロードします。

于 2012-12-06T09:30:13.160 に答える
-1

私にもこの問題があり、「jquery-ui.js」コンテンツではなく「jquery-ui.css」コンテンツを保存したことがわかりました。
正しいファイルを使用しているかどうかを確認してください。

于 2014-07-27T11:49:02.257 に答える