日期:2014-05-16  浏览次数:20261 次

js处理后退还会提示的问题
if(window.name== "current"){
             //如果满足这个条件的话就表示页面是后退来的,
    alert("后退时会执行");
        }else{
            window.name= "current";//给页面命名
            alert("后退不会执行");
           
        }

上页面这个方法不可行
window.name是给当前的窗口命名的。
但可以小改动,借用java的Token机制的思想。有两种情况,下面还有第三种变态的处理方法
a)在点击后退时给"window.name"设值,如“onclick="window.name='back';history.go(-1);"”;然后再小改动一下上面的方法也行
if(window.name== "back"){
             //如果满足这个条件的话就表示页面是后退来的,
    window.name=="current";//改变窗口名,方便下次提交时提示,可以执行else的内容
    alert("后退时会执行");//正常这里是不写内容,不过,上面的这条一定要写
        }else{
    //这里面是要正常提示的内容
            alert("后退不会执行");
          
        }
这个方法是偷工减料的,方便中途修改(因为搜索“history”就可以找出哪些是后退的)。如果开始做处理的后退还会提示的话,就不建议用户这种方法,因为这种方法无法解决点击浏览器的后退。
b)以下这个方法可以解决点击浏览器的后退。会好很多。原理还是一样
在当前提示的页面的前一个连接中,点击时先给"window.name"设值,如“onclick="window.name='prior';"”然后再小改动一下上面的方法也行
if(window.name== "prior"){
             //如果满足这个条件的话就表示页面是“前进”来的,
    window.name=="current";//改变窗口名,再前进,再后退时,window.name为current。当前{}里面的内容就不会执行了
     //这里面是要正常提示的内容    
    alert("这是第一次执行的提示");
        }else{
            alert("这个是后退所会执行的");//正常这里是不写内容,或者直接不写else{}
        }
这个方法呢,做时需要走回头路,如果写的时清楚知道要有提示的话,就不用走回头路了。不然做着的时候发现要有提示,那就要回过头补写了。一般情况下是清楚地
c)小弟还想到了一种方法,但这种方法做起来感觉有点别扭
在要提示的页面中写一个隐藏的文本框<input type="hidden" name="globalMessage" id="globalMessage" value="1"/>,注意不要重名
if($("#globalMessage").val()== "1"){
             //如果等于默认值就表示页面是“前进”来的
    $("#globalMessage").val('0');//改变这个框的值,再前进,再后退时,$("#globalMessage").val()为“0”。当前{}里面的内容就不会执行了
     //这里面是要正常提示的内容    
    alert("这是第一次执行的提示");
        }else{
            alert("这个是后退所会执行的");//正常这里是不写内容,或者直接不写else{}
        }
以上获值是JQ的写法。此方法就要注意先后顺序了。js代码一定要写在后面了,不然的话会找不到ID,测试了一下还行,(部分浏览器不行,如“chrome”)
我个人认为这个方法是最好的了。您想到更好的了吗?欢迎分享(在下分享的是一种思想,其实还有类似的做法)