让一段js代码在某段方法执行后失效

跷跷板理论:每次用户访问网站,相当于创建了一个左侧朝上的跷跷板,跷跷板左边是A页面状态,右边是页面B状态,并且左边跷跷板上方会不断丢数据下来,当丢下来一个较重数据块(用户登录)是,跷跷板将会被翘起,并一直保持该状态

使用场景:控制页面初始化代码,使初始化代码在执行完初始化状态后失效

需求分析:比如在首页的一个span标签中存储着用户登录状态,每次页面更新js扫描着个span,用来判断用户是否登录,是否需要做初始化,

而用户一但登录,这段初始化js在执行完毕之后失效,

如果这样做,会出现什么问题呢

假设,通过登录控制方法进入页面A,后端传递的数据,可以支持初始化正常执行,完毕之后页面正常,之后进入页面B之后再通过按钮访问回到A页面,这时没有登录时传递的数据,页面继续执行初始化,将会失去用户的登录状态

而这种情况是我们不想看到的

我们希望页面A在初始化完成之后,之后的访问不再执行初始化

解决思路是这样的,通过设定一个哨兵变量

  if (sessionStorage.getItem('number')==null) {

                    初始化代码


                    sessionStorage.setItem('number',2);

        
}

让页面每次进入时判断number变量的值,如果为null,则执行初始化

否则正常展示

那么在执行完毕之后,我们设置number的值为2,也可以是任意值,不为空就可,

这样就可以实现,

那么这其实是最简单的一种应用,这种方式最好的地方在于,

            sessionStorage.setItem('number',2);

这句可以放在别处,因为如果直接放在if最后,如果我多次刷新页面A而不登录,那么之后再登录是,if中的语句将被跳过,初始化块执行了个寂寞,更好的方式是将控制if 的这段代码放在初始化执行过程中

例子

  function myfun(){
     
        if (sessionStorage.getItem('number')==null) {//判断是否需要初始化
            sessionStorage.setItem('USER_NAME',document.getElementById("user").innerHTML);
           
        }

       //该语句有两种状态,1,初始化时,上面的if中语句存页面标签内容,该语句再读到,用于初始化
       //                 2,初始化完毕之后,USER_NAME变量将一直存在,这时只需要读就可以
            var user = sessionStorage.getItem('USER_NAME');
       
        // 提示登录
        if(user==""){

            //初始化内容
           
            alert("需要登录");
            document.getElementById('xtb1').setAttribute('href','#');
         
        }else
        {
           //使初始化代码失效,
            sessionStorage.setItem('number',2);

            document.getElementById('xtb1').setAttribute('href','/myaccount');  

            alert("登录成功");

        }

可以看到能将控制if执行的语句放到其他地方,来保证代码的健壮

这个问题到此结束,下面记录一些自己的问题,

在最开始时,我考虑将USER_NAME直接作为if的条件,但因为该变量存储的是页面标签内容,无法做准确的判断,而且页面标签内容一变,判断条件将直接失效,所以不得已只能做哨兵变量number

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值