我有一個<select>
標籤。在更改所選項目時,某些<div>
可通過以下功能使用AJAX進行更新:update_div1, update_div2, update_div3
。管理該操作的代碼如下,並且運行良好:瀏覽器的後退按鈕顯示奇怪的行爲。 History.js
$('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
這是RESPONSABLE管理瀏覽器的歷史。在這個函數中,我使用history.js來推動歷史堆棧中的瀏覽器狀態。正如我在閱讀關於history.js的關於SO的許多文章後知道的那樣,後退和前進按鈕的動作應該被包括在History.Adapter.bind()
中。問題在於瀏覽器的後退按鈕有一些奇怪的現象:他們多次執行History.Adapter.bind()
以內的功能,這就是我已經通過<select>
觸發了onChange事件的次數。
的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);
}
感謝您對此問題的反饋。移動History.Adapter.bind並將其放入我的$('select.select-x')是否合適?change(function(e){} ??我將同時測試並返回 – 2013-04-11 17:18:13
@lettersandblankspaces您應該只綁定一次,所以不要把它放在不止一次調用的函數中,但是如果你真的想這樣做,你可以在$(window).unbind('statechange') 'History.Adapter.bind'因此它刪除舊的 – TheBrain 2013-04-11 17:22:51
你在說什麼是真正合乎邏輯的!!!我會做到這一點,並回來 – 2013-04-11 17:24:45