【问题标题】:How to keep track of which buttons have been pressed after page reloaded?如何跟踪页面重新加载后按下了哪些按钮?
【发布时间】:2011-10-30 00:16:27
【问题描述】:

我是 Javascript 和 JQuery 的新手。在互联网上搜索解决方案后,我决定发布这个问题。

问题:当用户点击 iframe 内的链接时,它会更新父级的进度条,该进度条只会触发一次。但是,当用户转到另一个页面并返回时,iframe 中的页面会重新加载,javascript 也是如此,这意味着可以为该按钮再次更新进度条,这是我不想要的。在重新加载和禁用该功能后,有什么方法可以跟踪单击了哪些元素? URL-Parameters??

iframe 中的 HTML:

<div id="sidenav">
   <ul>
      <li><a href="../right/section1/page1.html" target="presentation" class="active" name="position">positioning</a></li> 
      <li><a href="../right/section1/page2.html" target="presentation">comparisons</a></li>
    </ul>
</div>

iframe 页面中的 Javascript:

$('#sidenav ul li a').one('click', window.parent.updateBar);

【问题讨论】:

  • 设置一个包含按钮状态的cookie。这是在多个页面之间持久保存数据的唯一方法(直到 html5 本地存储变得足够广泛,您可以假设它始终存在)。
  • @Marc B,感谢您的建议。这个项目目前只处理 webkit 浏览器,所以在查看了 HTML5 localStorage 之后,我认为这个建议可能是要走的路。

标签: javascript jquery iframe url-parameters


【解决方案1】:

无论您想在客户端上录制什么,您基本上都有相同的选择:

  • cookies
  • 客户端存储
  • 网址哈希

或:

  • 往返服务器并将数据存储在结果页面中

【讨论】:

    【解决方案2】:

    类似于localStorage。唯一的缺点是即使在重新启动等之后它仍然存在,但是如果重新加载整个网站,您可以重置该值。 IE7及更低版本也不支持。

    function updateBar() {
        if(localStorage['pressed'] == 'true') return; // abort if already pressed
    
        // do things
    
        localStorage['pressed'] = 'true'; // save the data that it is pressed
    }
    

    【讨论】:

    • 现在 localStorage 是 HTML5 功能吗?因为我正在进行的这个项目实际上只处理 webkit 浏览器,并使用了许多新的 CSS3、HTML5 功能。
    • @leetou:是的,很棒。
    • 感谢您的建议,特别是当项目专门处理 webkit 浏览器时,这很有效。只有一个问题,你已经“按下”了,因为有几个按钮,每个按钮都有自己的触发器吗?
    • @leetou:@leetou:只有一个localStorage['pressed'],所以如果你想为每个按钮唯一地存储它,你必须将pressed更改为唯一的东西(例如按钮的ID)。跨度>
    【解决方案3】:

    您可能想在服务器端做类似的事情。跟踪页面上数据的状态通常在服务器端完成,因此可以将逻辑排除在界面之外。使将来的维护变得更加容易。

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2010-12-26
      • 2023-03-03
      • 2015-07-12
      • 1970-01-01
      • 2018-09-30
      相关资源
      最近更新 更多