1

<select>タグをつけています。選択した項目を変更すると<div>、関数を介して AJAX を使用して一部の が更新されます update_div1, update_div2, update_div3。この操作を管理するコードは以下のとおりで、うまく機能しています。

$('select.select-x').change(function(e) {

    e.preventDefault(); 

    var value = $('select.select-x option:selected').val(); 
    var text = $('option:selected').text();

    update_div1(value); 
    update_div2(value);
    update_div3(value);
    manage_history(value,text);

    return false;

});

manage_history問題は、ブラウザ履歴の管理を担当する最後の関数にあります。この関数では、履歴スタックにブラウザーの状態をプッシュするために history.js を使用しています。SO に関する history.js に関する多くの記事を読んだ後にわかっているように、戻るボタンと進むボタンのアクションは .xml に含める必要がありますHistory.Adapter.bind()。問題は、ブラウザーの戻るボタンが奇妙な動作をしていることです。それらは、関数をHistory.Adapter.bind()何度も実行します<select>

のコードmanage_historyは次のとおりです。

function manage_history(str,str2)
{

    var History = window.History;
    if ( !History.enabled ) { return false; }

    var path = 'http://localhost/enc/?p='+str;

    History.pushState({myid:str},str2,path);

    History.Adapter.bind(window,'statechange',function() { 

        var State = History.getState();

        update_div1(State.data.myid); fter
        update_div2(State.data.myid);
        update_div3(State.data.myid);
    }); 
} 

私がはっきりしていたことを願っています。あなたの助けに感謝します。

theBrain コントリビューション後のソリューション全体:

$('select.select-x').change(function(e) {

    e.preventDefault(); 

    var value = $('select.select-x option:selected').val(); 
    var text = $('option:selected').text();

    manage_history(value,text);

    return false;

});

History.Adapter.bind(window,'statechange',function() { // Note:  Using statechange instead of popstate

        var State = History.getState();

            update_div1(value); 
        update_div2(value);
            update_div3(value);

    }); 

function manage_history(str,str2)
{

    var History = window.History;
    if ( !History.enabled ) { return false; }

    var path = 'http://localhost/enc/?p='+str;

    History.pushState({myid:str},str2,path);

        update_div1(State.data.myid); 
        update_div2(State.data.myid);
            update_div3(State.data.myid);

} 
4

1 に答える 1

2

History.Adapter.bindを関数から離しますmanage_history。関数を呼び出すたびに再バインドしmanage_historyます。

于 2013-04-11T17:14:37.593 に答える