1

ここでスクリプトに少し問題があります。何らかの理由で # タグが有効にならず、その理由がわかりません。このチュートリアルの助けを借りて、この JavaScript を作成しました。(ページの読み込みは問題なく動作します。)

誰かがそれを見て、なぜそれがうまくいかないのか教えてもらえますか?

 var default_content="";

    $(document).ready(function(){   //executed after the page has loaded

        checkURL(); //check if the URL has a reference to a page and load it

        $('ul li a').click(function (e){    //traverse through all our navigation links..

                checkURL(this.hash);    //.. and assign them a new onclick event, using their own hash as a parameter (#page1 for example)

        });

        setInterval("checkURL()",250);  //check for a change in the URL every 250 ms to detect if the history buttons have been used

    });

    var lasturl=""; //here we store the current URL hash

    function checkURL(hash)
    {
        if(!hash) hash=window.location.hash;    //if no parameter is provided, use the hash value from the current address

        if(hash != lasturl) // if the hash value has changed
        {
            lasturl=hash;   //update the current hash
            loadPage(hash); // and load the new page
        }
    }

    function loadPage(url)  //the function that loads pages via AJAX
    {
        // Instead of stripping off #page, only 
        // strip off the # to use the rest of the URL
        url=url.replace('#','');

     $('#loading').css('visibility','visible'); //show the rotating gif animation

         $.ajax({
            type: "POST",
            url: "load_page.php",
            data: 'page='+url,
            dataType: "html",
            success: function(msg){

                   if(parseInt(msg)!=0) //if no errors
                {
                    $('#content').html(msg);    //load the returned html into pageContet

                }  $('#loading').css('visibility','hidden');//and hide the rotating gif
            }

        });

    }
4

1 に答える 1

1

hashchange次のように、イベントをリッスンする関数を追加することで、これを大幅に簡素化できます。

$(window).on("hashchange", function() {
    loadPage(window.location.hash);
});

この方法では、タイマーを処理したり、アンカーのクリック イベントをオーバーライドしたりする必要はありません。

イベントはハッシュが変更されたときにのみ発生するlasthashため、追跡する必要もありません。hashchange

于 2013-08-20T19:31:59.867 に答える