我正在尝试打开构建系统,每次单击锚标记时都会打开一个新链接。我尝试使用随机功能,但有时它会一次又一次地打开相同的链接。但是,因为我希望链接按顺序打开并遵循循环..即如果我有三个链接,用户第一次点击锚文本将打开第一个链接,然后第二个,然后是第三个,然后再打开第一个链接链路..
这意味着如果其他用户点击,则链接必须更改。
这是我发现的使用随机函数的代码..
<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>
有人可以帮我解决这个问题吗?
答案 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>
答案 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)
您可以点击点击用户点击按钮,然后点击此管理。