我有一个电子商务网站,最长购物篮时间为20分钟。我在JS中写了一个简单的计数器来显示剩余时间,如下所示:
function basketCounter() {
var minutes = Math.floor(count / 60);
var sec = count - minutes * 60;
if (sec < 10) {
sec = '0' + sec;
}
console.log("hello");
$(".temps_restant").html("reste: " + minutes + " : " + sec );
$("#tunnel_panier_temps").html("" + minutes);
if (count == 0) {
window.location = '{{serverRequestUri}}flush_panier/1/';
}
count--;
}
体内:
var count = {{panierTmp.lifetime - now}};
$(document).bind('pageinit', function() {
$("img.lazy").unveil();
if (count > 0) {
setInterval('basketCounter()', 1000);
}
});
当我在没有ajax的情况下在网站上导航时,它工作得很好。但是,当我试图在JQM中导航ajax时,计数器每次都会重新执行并加速,2秒乘2秒,如果我返回两次,则会是3秒乘3秒。
我找不到任何解决办法。。
您的pageinit错误,应该只执行一次:
var count = {{panierTmp.lifetime - now}};
var interval=null;
$(document).bind('pageinit', function() {
$("img.lazy").unveil();
if (count > 0 && !interval) {
interval=setInterval('basketCounter()', 1000);
}
});
如果不进行此检查,每个pageinit事件都将添加另一个调用basketCounter的间隔。
您也可以检查数据是否存在,而不是设置变量。
if(!$(document).hasData('basketCounter')){
$(document).data('basketCounter',{{panierTmp.lifetime - now}});
}
您可以尝试以下操作:
1) 尝试删除任何隐藏的页面
<head>
document.on('pagehide', function(e) {
$(e.target).remove();
});
</head>
2) 取消绑定并绑定页面事件。
$(document).off('pageinit').on('pageinit', ....