2013-03-21 28 views
1

我有这样的javascript代码:随机化选择和输出变量跨越标记在javascript

var doNewPoll = function(){ 
    var vacationIndex = Math.round(Math.random(myVacations.length)); 
    var dest1 = myVacations[vacationIndex]; 
    var dest2 = myVacations[vacationIndex]; 
    alert(dest1); 
    alert(dest2); 
    } 

我的2个问题是:
1)如何确保我的变量Dest1处和dest2是不一样的?我希望它从myVacations数组中提取2个不同的选项。

和2)我可以使警报起作用,但我不想要警报,我希望dest1和dest2的结果出现在文档中的跨度标签id'd Span1和Span2中。我只是在如何做到这一点上放屁。
谢谢!

回答

2

首先,使用地板,不是圆的,你不想让你的指数是长度:

Math.floor(Math.random(myVacations.length)); 

然后,最简单的避免重复只是循环,直到第二个数字是从不同第一。这意味着你必须建一个指标,当然:

var index1 = Math.floor(Math.random(myVacations.length)); 
var index2 = index1; 
while (index2==index1) index2 = Math.floor(Math.random(myVacations.length)); 
var dest1 = myVacations[index1]; 
var dest2 = myVacations[index2]; 

为了使文件出现在跨度,最简单的就是先从元素目前不存在:

<span id=d1></span> 
<span id=d2></span> 

然后,以填补他们:

document.getElementById("d1").innerHTML = dest1; 
document.getElementById("d2").innerHTML = dest2; 
+0

另外,由于索引存储在一个变量中,因此'dest1'和'dest2'应该总是相同,假设'myVacations'不会在这些行之间改变。所以你需要两个'Math.floor(Math.random(myVacations.length));'线。 – 2013-03-21 22:28:52

+0

@dystroy我用你的建议更新了我的代码,现在我无法在浏览器中预览页面 - 它只是旋转并旋转,从不加载。有任何想法吗? doNewPoll函数被设置为运行onload,那么它会以某种方式卡在循环中? – TaraX 2013-03-21 23:31:28

+0

正如我以前的评论中提到的,我无法使这种方法奏效,所以我最终采用了完全不同的方法。 – TaraX 2013-03-21 23:49:03

0

//我假定SPAN1和跨距2是这些元素的id

var doNewPoll = function(myVacations, span1, span2){ 
    var vacationIndex1 = Math.round(Math.random(myVacations.length)); 
    var vacationIndex2 = null; 
    do{ 
    vacationIndex2 = Math.round(Math.random(myVacations.length)); 
    } while (vacationIndex2 == vacationIndex); 

    document.getElementById(span1).innerHTML = myVacations[vacationIndex1]; 
    document.getElementById(span2).innerHTML = myVacations[vacationIndex2]; 

}