-1

我对我的编程任务有点困惑。我需要制作按钮,以便在加载页面时,本地存储将检测用户是否在上次加载页面时单击了按钮。如果用户点击了按钮,if 应该给出一个警告声明,说明他们已经点击了按钮。如果没有,警报应该说他们没有点击按钮。我要问的是,有没有办法检查在上一页加载时是否点击了 htm 按钮?谢谢你。

4

3 回答 3

2

不,没有“本机”方法来检查是否在上一页加载时单击了 html 按钮。您可以排序(https://developer.mozilla.org/en-US/docs/Web/CSS/Privacy_and_the_:visited_selector)检查是否已使用 :visited css 选择器访问了链接,但这不是您想要的无论如何,因为它会持续不止一个页面视图。

可能最好的办法是:

  1. 页面加载时,检查本地存储是否设置了某些值(即 linkVisited)

    一个。如果它已被访问,则在链接的“单击”上绑定一个事件,并显示一条警报“链接已访问”。

    湾。如果还没有被访问,则在链接的“点击”上绑定一个事件,并在跟随链接之前在本地存储中设置一个值(即linkVisited)(window.location = link href)。

  2. 绑定适当的事件后清除本地存储中的任何现有值,以便后续刷新将继续到 1.b 而不是 1.a

于 2013-05-28T16:06:20.127 回答
0

本地存储 演示

HTML

<body onload="checkCookie()">
    <input type="button" value="Click ME" onclick="addCookie()">
</body>

脚本

function checkCookie()
{

    var username= localStorage.getItem("buttonClicked");


      if (username!=null && username!="" )
      {
          alert("Button Clicked");
           localStorage.removeItem("buttonClicked");
      }
      else 
      {
          alert("Button Not Clicked");
      }

}
function addCookie(){
   localStorage.setItem("buttonClicked","true");

}

带饼干 演示

HTML

<body onload="checkCookie()">
    <input type="button" value="Click ME" onclick="addCookie()">
</body>

脚本

function setCookie(c_name,value,exdays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name)
{
    var c_value = document.cookie;
    var c_start = c_value.indexOf(" " + c_name + "=");
    if (c_start == -1)
      {
      c_start = c_value.indexOf(c_name + "=");
      }
    if (c_start == -1)
      {
      c_value = null;
      }
    else
      {
      c_start = c_value.indexOf("=", c_start) + 1;
      var c_end = c_value.indexOf(";", c_start);
      if (c_end == -1)
      {
    c_end = c_value.length;
    }
    c_value = unescape(c_value.substring(c_start,c_end));
    }
    return c_value;

}

function checkCookie()
{

    var username=getCookie("buttonClicked");
      if (username!=null && username!="")
      {
          alert("Button Clicked");
          setCookie("buttonClicked",null,-365);// RESET Cookie
      }
      else 
      {
          alert("Button Not Clicked");
      }

}
function addCookie(){
    setCookie("buttonClicked","true",365);
}
于 2013-05-28T15:55:38.507 回答
-1

如果你想避免 cookie,你可以做一个技巧:

您可以在此按钮单击事件中添加一个编辑表单字段的功能,然后,您可以将此表单发送到同一页面(get 方法),而不是重新加载页面,然后您可以轻松地从url(表单可以隐藏,所以用户看不到)。onload(也是第一次)checkme 函数将“no”值添加到 url,因此,如果您发送或重新加载页面,警报会显示“no”。如果您单击按钮,则 url 值会更改,如果您重新加载页面或发送表单,则警报会显示“是”值。

这行得通,是的,它可以被黑客入侵,但没有 cookie 也可以

<body onload="checkme(document.URL)">
<script>
function checkme(ur){
    var interesting = ur.split('?');
    if(typeof(interesting[1]) != 'undefined'){
        var more_interesting = interesting[1].split('=');
        alert(more_interesting[1]);
        document.getElementById('myfieldhidden').value='no';
            window.history.replaceState('Object', 'Title', '?clicked=no');
    }else{
        //first load
        window.history.replaceState('Object', 'Title', '?clicked=no');
    }
}
function func2(){
        window.history.replaceState('Object', 'Title', '?clicked=ye');  
}
</script>

<button onclick="document.getElementById('myfieldhidden').value='ye';func2()"></button>

<form title="myformsecret" action="" id="myformsecret" method="get">
<input name="clicked" id="myfieldhidden" value="nop"/>
</form>

<a href="javascript:document.getElementById('myformsecret').submit()">send me when you want</a>
</body>
于 2013-05-28T16:03:02.740 回答