在不同的输入文本上生成随机数并确保显示的随机数是唯一的

时间:2014-05-01 02:01:34

标签: jquery arrays class random numbers

我尝试使用JQuery创建一个JavaScript代码段,其中随机数会不断变化并显示在不同的文本框中。

但是,我无法弄清楚如何使数字显示每个文本框的不同值。我怎么能做到这一点?

到目前为止,这是我的JavaScript代码:

var pcount = $(".pcount");
for(var i= 0; i < pcount.length; i++){
var n = []; 
var element = pcount.eq(i);
setInterval(function() {
    n[i] = 10 + Math.floor(Math.random(Number($( ".pcount" ).val())) * 10);    
    $('.pcount').val(n[i]); 
}, 1000);}

以下是文本框的HTML代码:

<input type="text" class="pcount pc1" value="10"/>
<input type="text" class="pcount pc2" value="13"/>
<input type="text" class="pcount pc3" value="16"/>

1 个答案:

答案 0 :(得分:0)

要确保随机数真正独一无二,您必须跟踪之前发生的所有随机数,如果发生冲突,请生成一个新的:

var makeUniqueRandom = (function() {
    var randoms = {};
    return function(low, hi) {
        var rand;
        while (true) {
            rand = Math.floor((Math.random() * (hi - low)) + low);
            if (!randoms[rand]) {
                randoms[rand] = true;
                return rand;
            }
        }
    }
})();

用法:

var rand = makeUniqueRandom(1, 10);

注意:您必须确保不要耗尽可用的随机数,因为如果这样做,它将变成无限循环。因此,如果您要求1-10中的随机数(9个可能的值),则不要将其调用超过9次。


要将随机值放入<input>标记,您可以执行以下操作:

<input type="text" class="pcount pc1" value="10"/>
<input type="text" class="pcount pc2" value="13"/>
<input type="text" class="pcount pc3" value="16"/>

$(".pcount").each(function() {
    this.value = makeUniqueRandom(1, 10);
});