每次页面被其他人重新加载时如何打开新链接?

时间:2016-05-17 14:52:09

标签: javascript jquery html

我正在尝试打开构建系统,每次单击锚标记时都会打开一个新链接。我尝试使用随机功能,但有时它会一次又一次地打开相同的链接。但是,因为我希望链接按顺序打开并遵循循环..即如果我有三个链接,用户第一次点击锚文本将打开第一个链接,然后第二个,然后是第三个,然后再打开第一个链接链路..

这意味着如果其他用户点击,则链接必须更改。

这是我发现的使用随机函数的代码..

<script type="text/javascript'>
function random_3(){
    var myrandom=Math.round(Math.random()*2)
    var link1="http://www.codingforums.com"
    var link2="http://www.cssdrive.com"
    var link3="http://www.dynamicdrive.com"
    if (myrandom==0)
        window.location=link1
    else if (myrandom==1)
        window.location=link2
    else if (myrandom==2)
        window.location=link3
}
</script>
<form>
<input type="button" value="random link!" onClick="random_3()">
</form>

有人可以帮我解决这个问题吗?

5 个答案:

答案 0 :(得分:1)

  

我尝试使用随机功能但有时会一次又一次地打开相同的链接

由于您正在使用的随机计算,您可能会连续多次获得相同的链接。 请尝试以下方法:

var myrandom=Math.floor(Math.random()*3);

你应该以这种方式获得更好的分发。

现在,关于您的原始问题,如果您希望在页面重新加载之间保持持久状态,那么每次链接不同时,您可能需要使用cookie或localStorage来存储最后一个为该用户使用索引。

示例:

var links = ['http://www.codingforums.com', 'http://www.cssdrive.com', 'http://www.dynamicdrive.com'];
function nextLink() {
 var index = localStorage.getItem('lastPos') || -1;
 index = (index + 1) % links.length;
 localStorage.setItem('lastPos', index);
 return links[index];
}

答案 1 :(得分:0)

首先,您必须在数组中列出您的链接。其次,您必须定义一个变量来保存该数组中最后打开的链接的索引,以使相同链接的连续打开无效(实际上它是一个URL)。通常,您可以遵循以下代码:

urls = ['http://domain1.com','http://domain2.com', 'http://domain3.com', 'http://domain4.com'];
var lastUrl = '';
function getRandomIndex(arr){  
  return Math.floor(Math.random() * ((arr.length+1) - 1));
}
function openUrl(){
  url = urls[getRandomIndex(urls)]; 
  do {
      if (url == lastUrl){
        url = urls[getRandomIndex(urls)];
      }
    else{
        lastUrl = url;
        //Using alert instead of window.location for testing
        alert(url)
        //window.location = url;       
    }
  }
  while (lastUrl != url);

}

然后进行测试:

<a href="javascript:openUrl()">Click here for test</a>

这是在线Demo

参考: Generating random whole numbers in JavaScript in a specific range?

修改

根据您的评论,要求相当容易,而不是根据随机值进行选择,您将lastUrl定义为整数存储,并且每次调用openUrl()时,它都会增加1检查其值后是否大于urls数组长度,如下所示:

已修改openUrl

urls = ['http://domain1.com','http://domain2.com', 'http://domain3.com', 'http://domain4.com'];
//lastUrl Index in urls array
// Global variable
var lastUrl = 0;
function openUrl(){
      if (lastUrl > (urls.length - 1)){
          //reset it to 0
          lastUrl = 0;
      }
      else{
          url = urls[lastUrl];
          lastUrl++;
          alert(url)
        //window.location = url; 
      }
    }

答案 2 :(得分:0)

您需要做的是保存链接的索引,然后每次都增加它,以便按顺序循环浏览链接。

以下是您想要的工作示例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<script>
  urls = ['http://domain1.com','http://domain2.com', 'http://domain3.com', 'http://domain4.com'];
  var urlIndex = 0;

function openUrl(){
  url = urls[urlIndex % urls.length];
  window.location = url;
  urlIndex ++;
}
  </script>
  <a href="javascript:openUrl()">Get a link</a>
</body>
</html>

Here's a demo :)

答案 3 :(得分:0)

 var myrandom = 0;

function random_3(){
   myrandom += 1;
    
    var link1="http://www.codingforums.com";
    var link2="http://www.cssdrive.com";
    var link3="http://www.dynamicdrive.com";
    if (myrandom==1)
      window.open('http://www.codingforums.com','_blank');
    else if (myrandom==2)
         window.open('http://www.cssdrive.com','_blank');
    else if (myrandom==3)
        window.open('http://www.dynamicdrive.com','_blank');
    else if (myrandom>3)
         window.open('http://www.codingforums.com','_blank');
}
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<form>
<input type="button" value="random link!" onClick="random_3()">
</form>

答案 4 :(得分:-1)

您可以点击点击用户点击按钮,然后点击此管理。