即使在我重新加载页面后,如何防止已经在 J​​avascript 中启动的“onclick”功能?

Posted

技术标签:

【中文标题】即使在我重新加载页面后,如何防止已经在 J​​avascript 中启动的“onclick”功能?【英文标题】:How do I prevent already started "onclick" function in Javascript even after I reload the page? 【发布时间】:2021-11-16 03:42:57 【问题描述】:

我有一个带有“onclick”功能的按钮,它会禁用该按钮 15 秒。之后它会自动点击,但在点击后 15 秒的时间段内,如果我刷新页面,它不会计算剩余的秒数,按钮现在是可点击的。

function up()
    $(document).ready(function () 
          $("#upside").attr("disabled", true);
          document.getElementById("downside").disabled = true;
            setTimeout(function () 
              $("#upside").removeAttr("disabled");
              $("#downside").removeAttr("disabled");
              window.location ='/Balnce_add';
                  ,15000);
  );
    

这是我的 html 按钮代码:

<button id="upside" onclick="up()" type="submit" class="btn btn-success">Up</button>

【问题讨论】:

没有必要在这样的事件处理程序中使用$(document).ready()。而当页面被刷新时,上一页的一切都会消失;没有任何东西可以在过渡中幸存下来,包括您的超时处理程序。 This 值得一读。 那么先生,我该如何防止这件事,这对我来说非常重要 如果您希望信息在页面重新加载之间保持不变,请将其保存在 sessionStorage 中。当您禁用该按钮时,将开始时间保存在会话存储中。当页面重新加载时,从会话存储中获取开始时间,如果从那时起 【参考方案1】:

这个想法是将startTime 保存到localStorage。然后当我们重新加载页面时,我们会得到remainingTime = startTime + timer - currentTime。如果remainingTime &gt; 0,我们将继续禁用该按钮。如果没有,我们什么也不做。

基于这个想法,我更新了您的代码以使其正常工作。您可以通过以下代码查看演示:

<html>
   <head>
      <title>Demo</title>
   </head>
   <body>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <button id="upside" onclick="up(true)" type="submit" class="btn btn-success">Up</button>
      <script>
         function getRemainingTimer(isNew) 
           var now = new Date();
           var timer = 15000;
           var remainingTimer = 0;
           var startTime = localStorage.getItem("startTime");
           if (startTime === null) 
             if (!isNew) return 0;
             localStorage.setItem("startTime", now.getTime());
             remainingTimer = timer;
            else 
             remainingTimer = timer + parseInt(startTime) - now.getTime();
           
           
           return remainingTimer;
         
         
         
         
         
         function up(isNew) 
          
         var remainingTimer = getRemainingTimer(isNew);
         console.log(remainingTimer);
         
         if (remainingTimer > 0) 
           $("#upside").attr("disabled", true);
           $("#downside").attr("disabled", true);
           
           var timeout = setTimeout(function() 
             $("#upside").removeAttr("disabled");
             $("#downside").removeAttr("disabled");
             window.location = '/Balnce_add';
            
            localStorage.removeItem("startTime");
            
           , remainingTimer);
          else 
           localStorage.removeItem("startTime");
         
         
         
         
         up(false);
         
      </script>
   </body>
</html>

另外,您可以通过https://codepen.io/tuandaodev/pen/NWgBjbv查看现场演示

【讨论】:

嘿,您的演示代码工作得非常好,但是当我在我的文件中尝试时,它显示了同样的问题,刷新后它被启用,它不计算铰接时间来启用它 你能帮我解决可能是什么问题 @LEGENDRYzZzZ 我为您准备了另一个带有向下按钮的版本。请让我知道它是否符合您的要求。 codepen.io/tuandaodev/pen/powQgYj @LEGENDRYzZzZ 你在新的 codepen URL 中看到了吗? @LEGENDRYzZzZ 很高兴为您提供帮助。我也是 *** 的新手。【参考方案2】:

这取决于应用程序的设置方式,但一种简单的方法是在 localhost 中存储一些内容,并带有单击按钮的 ID。

myButton.addEventListener('click', (evt) => 
  evt.preventDefault();
  let dateTime = new Date();
  localStorage.setItem('clickedButtons', [id: myButton.id, clickedAt: dateTime]
);

$(document).ready(() => 
  let storageButton = localStorage.getItem('clickedButtons')[0];
  let dateTime = new Date();
  if (dateTime - storageButton.clickedAt < 15000) 
    let btn = $(`#$storageButton.id`);
    btn.attr('disabled') = true;
  
)

我写得很快,所以可能有点粗略,但总体思路是在单击按钮时,在单击按钮时向 localstorage 添加一些内容,然后在页面加载时检查 localstorage,如果没有自单击按钮以来已 15 秒,请禁用它

【讨论】:

以上是关于即使在我重新加载页面后,如何防止已经在 J​​avascript 中启动的“onclick”功能?的主要内容,如果未能解决你的问题,请参考以下文章

即使在页面以角度5重新加载后如何将值本地存储到变量中

表单提交后如何防止页面重新加载 - JQuery

单击导航栏项目后如何防止重新加载单页应用程序?

防止在 django 中提交按钮后重新加载

防止页面重新加载表单按钮点击流星?

如何防止在页面加载时执行 javascript 函数?