<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);
}