sgu*_*uha 5 javascript jquery datatables html5-history
我dataTable在页面上有一个对象,表示我需要跟踪的版本列表/releases我想要添加以下功能
/releases?query=<query>,dataTable将使用提供的查询初始化query如果用户改变搜索项参数进行更新到目前为止,我能够完成前2个,但是当我监听popstate事件时,重新绘制表会触发一个pushState我无法弄清楚如何防止的事件.到目前为止,这是我的代码:
$(document).ready(function(){
var prevSearch;
var table = $('#releases').dataTable({
"bJQueryUI" : true,
"sPaginationType" : "full_numbers",
"iDisplayLength" : 50,
"oSearch": {"sSearch": '#{params[:query]}'},
"fnDrawCallback": function(oSettings) {
var curSearch = oSettings.oPreviousSearch.sSearch;
if (!prevSearch) {
prevSearch = curSearch;
} else if (curSearch != prevSearch) {
console.log("changed to: " + curSearch);
history.pushState({query: curSearch}, "title", "releases?query=" + curSearch);
prevSearch = curSearch;
}
}
});
window.addEventListener("popstate", function(e) {
if (e.state) {
table.fnFilter(e.state.query);
}
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是rails后端,这是在页面中提供的内联javascript.
这里你只有两个选择:
添加像这样的黑客
$(document).ready(function () {
var prevSearch;
var saveState = true;
var table = $('#releases').dataTable({
"bJQueryUI":true,
"sPaginationType":"full_numbers",
"iDisplayLength":50,
"oSearch":{"sSearch":'#{params[:query]}'},
"fnDrawCallback":function (oSettings) {
var curSearch = oSettings.oPreviousSearch.sSearch;
if (!prevSearch) {
prevSearch = curSearch;
} else if (curSearch != prevSearch) {
console.log("changed to: " + curSearch);
if (saveState) {
history.pushState({query:curSearch}, "title", "releases?query=" + curSearch);
}
prevSearch = curSearch;
}
}
});
window.addEventListener("popstate", function (e) {
if (e.state) {
saveState = false;
table.fnFilter(e.state.query);
saveState = true;
}
});
});
Run Code Online (Sandbox Code Playgroud)