如何使用随机ID显示div而不使用jQuery重复它?

时间:2014-11-13 14:49:26

标签: javascript jquery

我有一个功能可以选择0到45之间的随机数,然后我会显示具有特定ID的div。它工作正常,但它重复了一个数字。

任何人都可以建议这样不会重复数字吗?

我像这样调用函数 onclick

$(".skip").click(function () {

    scared++;
    $("#counter").html("My current count is: " + dared);
    var d = 50;


    /*$(".question").addClass("hideMe");
    $(this).parents("div").next("div").removeClass("hideMe");*/
    var r = Math.round(Math.random() * 44) + 1;
    var newquestion = "q" + r;
    $('.active').removeClass("active");
    $("#" + newquestion).addClass("active");


    if (scared > 44) {
        $('.main').fadeOut('fast');

        $('.logo').switchClass("logo", "share");
        $('.progress').css("display", "none");
        $('.share-game').css("display", "block");
        $('.hero').css("right", "-240px");
        $('#score-total').html(score + '');
    } else {

    }

    $('.red-line').append('<div id="children' + (d++) + '" class="red"></div>');

    return false;
});

2 个答案:

答案 0 :(得分:2)

你可以看到我做了什么。

var usedNumbers = [];
var randomNumbers = [];
$(function() {

    //Getting 20 random numbers
    for (i = 0; i < 20; i++) {
        randomNumbers.push(getRandomNumber());
    }
    console.log(randomNumbers);

    function getRandomNumber() {
        var hasInArray = true;
        do {
            var r = Math.round(Math.random() * 44) + 1;
            if (usedNumbers.indexOf(r) === -1) {
                usedNumbers.push(r);
                hasInArray = false;
                return r;
            }
        } while (hasInArray === true);

    }
});

警告不设置超出您想要的随机数的数量,因为这会导致无限循环!

答案 1 :(得分:0)

使用数组捕获已使用的数字,然后在每次单击时检查该数组,如果找到该数字,则生成一个新数字。当它已满时,它会重置为空数组。

var savedNumbers = [];

function getRandom() {
  if (savedNumbers.length === 45) {
    savedNumbers = [];
  }
  var r = Math.round(Math.random() * 44) + 1;
  if (savedNumbers.indexOf(r) > -1) {
    getRandom();
  } else {
    savedNumbers.push(r);
    return r;
  }
}

DEMO