记住最近的点击

时间:2013-06-13 19:12:46

标签: javascript jquery html css

因此,我希望能够在您转到单击页面后为链接设置不同的样式。我一直在使用以下代码:

$(document).ready(function(){
var url = document.URL;
function contains(search, find) {
    return search.indexOf(find) !== -1;
};
$('#topbar a').each(function(){
    var link = $(this).attr('href');
    var answer = contains(link,url);
    if(answer === true){
        $(this).addClass('check');
    }
    else{
        $(this).addClass('nocheck');
    };
});
});

这会浏览导航栏中的链接并检查它是否与链接在同一页面上,并且它可以正常工作,但我无法在一个特定情况下使用它:随机。

我有一个链接,从我的页面生成一个随机页面,因此它没有指定的链接,因为它链接到一个函数来随机生成页面(注意:我无法更改函数或访问它的信息) )。

那我怎么能检测到之前点击了随机链接所以我可以给它.check

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,则您的功能不适用于random链接,因为它有href http://mysite.com/random,但服务器会将您重定向到其他页面,如http://mysite.com/about-me,因此活动页面的url与随机按钮的href不匹配,并且它不会获得活动状态。

有人可能会争辩你是否希望它获得活跃状态,因为再次点击它不会(可能)带你到同一页面,但这就是问题。

我可以看到解决这个问题的方法。

服务器端:
而不是重定向到ie。随机函数中的http://mysite.com/about-me,您也可以重定向到http://mysite.com/about-me?random。通过添加此get变量,您不应该更改链接的行为(除非您有一些非常严格的控制器,或者实际使用该变量,但这不太可能)。然后,您可以使用javascript检测该变量是否存在于网址中,然后激活random按钮。

这样的事情:

$(document).ready(function(){
  var url = document.URL;
  // check for random
  if (url.indexOf('?random') >= 0) {
     $('#topbar a.random').addClass('check');
  }
  // check all other
  $('#topbar a:not(.random)').each(function(){
      if($(this).attr('href').indexOf(url) >= 0){
         $(this).addClass('check');
      }
      else{
         $(this).addClass('nocheck');
      };
  });
});

<强>饼干:
如果你没有访问服务器端随机控制器,你可以通过使用cookie完全使用javascript(我知道通过页面请求保持变量的唯一方法)。

点击random按钮后,您首先要使用javascript将random Cookie设置为true,然后再让实际链接执行此操作。在进入页面时,您可以执行与我之前的选项类似的检查,但是您可以检查cookie是否为tre,而不是网址。如果是,则将其更改为false(因此在下一页请求时,随机按钮将不再处于活动状态)并将random按钮设置为活动状态。

我相信第一个解决方案是首选(Cookie应该仅作为最后的手段使用,它们会在每个页面请求时发送,这意味着额外的数据,并且您的用户可能禁用了Cookie,或者可能存在法律反对使用cookie,所以函数不能总是工作),我不会写javascript了。请随意询问您是否更喜欢此解决方案,但需要进一步的帮助。