0

jQueryを使用してナビゲーションタブを作成しており、ページの読み込み時にどのナビゲーションタブに移動するかについての参照として使用するURLハッシュ値を検出しています。たとえば、誰かがexample.com/profile.php#mediaにアクセスすると、[メディア]タブが自動的に切り替わります。

私のjQueryコードは、Safari、Firefox、Chrome、およびOperaで機能しますが、Internet Explorerのどのバージョンでも機能しません(IE 6〜10でテスト済み)。私のコードにIEと互換性がないものはありますか?

JavaScript:

$(document).ready(function() {

tab = $('.tab');

function switch_active_tab() {
    tab.removeClass('active_tab');
    $(this).addClass('active_tab');
}

function hash_detect() {
    hash = document.location.hash.replace('#','');
    active_tab_id = $('.active_tab').attr('id').replace('-manager', '');
    // check if hash value is valid
    if( hash == 'pages' || hash == 'media' || hash == 'templates' || hash == 'scripts' ) {
        // if hash is not the same as the active tab
        if( hash !== active_tab_id ) {
            tab.removeClass('active_tab');
            $(document.location.hash+'-manager').addClass('active_tab');
        }
    }
    else {
        document.location = '#pages';
    }

}

function hash_respond() {
    hash = document.location.hash.replace('#','');
    active_tab_id = $('.active_tab').attr('id').replace('-manager', '');
    if( hash !== active_tab_id ) {
        document.location = '#' + active_tab_id.replace('-manager', '');
    }
}

$(document).ready(hash_detect);
$(window).bind('hashchange', hash_detect);
tab.click(switch_active_tab);
tab.click(hash_respond);

});

対応するHTML:

<div id="tab_wrapper">
    <div class="tab active_tab" id="pages-manager">Pages</div>
    <div class="tab" id="media-manager">Media</div>
    <div class="tab" id="templates-manager">Templates</div>
    <div class="tab" id="scripts-manager">Scripts</div> 
</div>
4

1 に答える 1

0

MSDNによると、locationオブジェクトは に属していwindowます。

を使用しているコードの一部を調べましたが、hash参照するだけlocation.hashで、IE で問題が発生したことはありません。window.location.hashまたは単にを使用してみることができると思いますlocation.hash

varもう 1 つの問題は、キーワードで変数を宣言していないことです。IEはこれに積極的に反対します。すべての変数は次のように宣言する必要があります...

var hash; // simple declaration

または...

var hash = window.location.hash.replace('#', ''); // declaration with assignment

IE にまったく関係のない問題が発生している可能性もあります。active_tab_idそれがあなたが期待する値を得ていることを確認するためにチェックします。

最後の手段として、IE Developer Toolsを使用してください。デバッガーはそれだけではありませんが、役立つ場合があります。

于 2012-12-22T23:00:55.103 に答える