2011-09-30 58 views
0

我有一个导航栏,我想访问与每个链接关联的不同列表中的随机URL。链接A将访问列表A,链接B将访问列表B,等等。 我一直使用从1997年的JavaScript代码,一条链路的伟大工程:包含在一个js文件带有多个列表的随机URL JS

< --code: - >

rnd.today=new Date(); 
rnd.seed=rnd.today.getTime(); 

function rnd() { 
     rnd.seed = (rnd.seed*9301+49297) % 233280; 
     return rnd.seed/(233280.0); 
}; 

function rand(number) { 
     return Math.ceil(rnd()*number); 
}; 

var item = 0; 
var URL = new Array(); 

URL[item++] = 'listitema.php'; 
URL[item++] = 'listitemb.php.php'; 
URL[item++] = 'listitemc.php'; 

function randomJump() { 
    var random = rand(item) - 1; 
    location.href = URL[random]; 
}; 

< --end js文件: - >

这是与该访问:

<a href="javascript:randomJump()" onmouseover="self.status='';return true"> 

尽管此代码非常适用于每页一个链接,我现在需要把它的工作万亩一个链接,每个链接都有一个不同的参考列表。我不知道如何使这个脚本适用于每个链接而不会干扰其他链接。 谢谢。

+0

为什么不使用'Math.random()'而不是自己的函数?如果你需要确保你的本地随机值与服务器上的相同(即相同的算法,相同的种子),通常使用自定义的RNG才有意义... – ThiefMaster

回答

1

这里的一个小功能,与许多不同的URL列表的工作,只要你想:

var listA = [ 
    'listitem-a.php', 
    'listitem-b.php', 
    'listitem-c.php' 
]; 

var listB = [ 
    'listitem-1.php', 
    'listitem-2.php', 
    'listitem-3.php' 
]; 

var listC = [ 
    'listitem-x.php', 
    'listitem-y.php', 
    'listitem-z.php' 
]; 

function goRandomURL(list) { 
    window.location = list[Math.floor(Math.random() * list.length)]; 
} 

然后,使用listA,你会打电话:

goRandomURL(listA); 

或把它放在一个链接像这样:

<a href="#" onclick="goRandomURL(listA)"> 

或对于listB,你可以使用这个:

<a href="#" onclick="goRandomURL(listB)"> 

供自己参考,javascript的Math.random()函数返回一个随机数为0和1(不包括1),它已经去籽根据当地的环境,这样你就不用多介绍之间浮动你拥有种子或随机功能。然后随机数按传入数组的长度进行缩放,然后向下舍入为数组索引的整数。这具有为我们的数组选择随机索引的效果。它会自动跟踪数组的长度,因此您可以自由地添加/删除数组中的项目,而无需以任何方式更改代码。


编辑 - 帮助您解决当前的问题。在当前的代码,我看到:

var listA = [ 
    'orange.php'; 
    'red.php'; 
    'blue.php'; 
]; 

var listB = [ 
    'gold.php'; 
    'silver.php'; 
    'bronze.php'; 
]; 

var listC = [ 
    'olive.php'; 
    'pink.php'; 
    'purple.php'; 
]; 

它应该是这样的:

var listA = [ 
    'orange.php', 
    'red.php', 
    'blue.php' 
]; 

var listB = [ 
    'gold.php', 
    'silver.php', 
    'bronze.php' 
]; 

var listC = [ 
    'olive.php', 
    'pink.php', 
    'purple.php' 
]; 

而且这样的:

goRandomURL(list) { 
    window.location = list[Math.floor(Math.random() * list.length)]; 
} 

应该是这样的:

function goRandomURL(list) { 
    window.location = list[Math.floor(Math.random() * list.length)]; 
} 
+1

+1,但请不要使用皇家代词“我们“,”我们的“等。只需使用文章”the“或”a“代替,例如“数字被缩放...”和“数组索引...”等等。 – RobG

+0

@RobG - 只是好奇 - 如果我使用“我们”,为什么会打扰你? – jfriend00

+0

它遇到了傲慢的傲慢,我知道这不是你的意图。它只是破坏什么是一个很好的答案。 – RobG