在后退按钮上使用 pjax 重新初始化 javascript
reinitialize javascript with pjax on back button
"done" 下面的回调在单击按钮时运行良好。但是使用浏览器后退按钮,不会再次调用 done 回调。
$.pjax({
url: $this.attr("href"),
container: '#div-section',
push: true
}).done(function() {
$object.init();
});
除了完成之外,还有其他方法可以在 pjax 端触发其他 javascript(因为它不起作用)吗?
已找到解决方案,但我猜页面中可能只有一个这样的处理程序 -
$(document).on("ready pjax:success", function(){
//initialize all javascripts here
});
编辑
以上解决方案导致对 pjax 调用进行双重绑定,一次在 pjax:success 内,然后第二次在 done 事件回调内。要在 back / forward 或 pjax 上只执行一个绑定,我们可以执行以下操作。在这种情况下,globalEventDirection 可用于在 pjax:success 内有条件地绑定,让 init 在单击按钮时完成。但是使用后退和前进按钮,初始化将在 pjax:success
内完成
globalEventDirection = undefined;
$(document).on("pjax:popstate", function(event){
globalEventDirection = event.direction;
});
$(document).on("pjax:success", function(event){
if(globalEventDirection === "back" || globalEventDirection === "forward" ) {
//reinitialize javascript
globalEventDirection = undefined;
}
});
"done" 下面的回调在单击按钮时运行良好。但是使用浏览器后退按钮,不会再次调用 done 回调。
$.pjax({
url: $this.attr("href"),
container: '#div-section',
push: true
}).done(function() {
$object.init();
});
除了完成之外,还有其他方法可以在 pjax 端触发其他 javascript(因为它不起作用)吗?
已找到解决方案,但我猜页面中可能只有一个这样的处理程序 -
$(document).on("ready pjax:success", function(){
//initialize all javascripts here
});
编辑
以上解决方案导致对 pjax 调用进行双重绑定,一次在 pjax:success 内,然后第二次在 done 事件回调内。要在 back / forward 或 pjax 上只执行一个绑定,我们可以执行以下操作。在这种情况下,globalEventDirection 可用于在 pjax:success 内有条件地绑定,让 init 在单击按钮时完成。但是使用后退和前进按钮,初始化将在 pjax:success
内完成 globalEventDirection = undefined;
$(document).on("pjax:popstate", function(event){
globalEventDirection = event.direction;
});
$(document).on("pjax:success", function(event){
if(globalEventDirection === "back" || globalEventDirection === "forward" ) {
//reinitialize javascript
globalEventDirection = undefined;
}
});