DEV Community

Cover image for Javascript Random Number Generator using jQuery
Code And Deploy
Code And Deploy

Posted on

2 1

Javascript Random Number Generator using jQuery

Originally posted @ https://codeanddeploy.com visit and download the sample code: https://codeanddeploy.com/blog/jquery/javascript-random-number-generator-using-jquery

In this post, I will share a javascript random number generator using jQuery with Bootstrap 4. That will generate random lottery numbers with awesome design.

javascript-random-number

Step 1. HTML Structure for Random Number Generator

Build the HTML for the random number generator. See below HTML code:

<form id="startNumbersGeneratorForm">
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label for="from_balls">From Balls</label>
                <input type="number" name="from_balls" class="form-control" value="5" aria-describedby="fromBallsHelp" min="0">
                <small id="fromBallsHelp" class="form-text text-muted">Enter the maximum number for balls. Ex: 6.</small>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label for="range_numbers">From Interval Numbers</label>
                <input type="number" name="range_numbers" class="form-control" value="45" aria-describedby="rangeNumbersHelp" min="0">
                <small id="rangeNumbersHelp" class="form-text text-muted">Enter the maximum value for interval of numbers. Ex: 49.</small>
            </div>
        </div>
    </div>
    <div class="row">   
        <div class="col-md-6">
            <div class="form-group">
                <label for="extra_balls">Extra Balls</label>
                <input type="number" name="extra_balls" class="form-control" value="1" aria-describedby="extraBallsHelp" min="0">
                <small id="extraBallsHelp" class="form-text text-muted">Enter the maximum number for extra balls. Ex: 2.</small>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label for="range_extra_numbers">Extra Interval Numbers</label>
                <input type="number" name="range_extra_numbers" class="form-control" value="20" aria-describedby="rangeExtraNumbersHelp" min="0">
                <small id="rangeExtraNumbersHelp" class="form-text text-muted">Enter the maximum value for interval of extra numbers. Ex: 20.</small>
            </div>
        </div>
    </div>
    <div class="form-group">
        <input type="submit" value="Generate Numbers" name="generate_numbers" class="btn btn-block">
    </div>
</form>
Enter fullscreen mode Exit fullscreen mode

Step 2: DIV container results

<div class="form-group">
    <input type="submit" value="Generate Numbers" name="generate_numbers" class="btn btn-block">
</div>
Enter fullscreen mode Exit fullscreen mode

Step 3: Add CSS

Add CSS files inside a header tag.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" href="main.min.css">

Enter fullscreen mode Exit fullscreen mode

Step 4: Add Javascript

Add Javascript files before </body> clossing.

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/numbers_generator.min.js"></script>
Enter fullscreen mode Exit fullscreen mode

Step 5: Complete HMLT Structure

Here is the complete HTML structure of our javascript random number generator using jquery.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Random Numbers Generator</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link rel="stylesheet" href="main.min.css">
</head>
<body>
    <div class="container-fluid py-5">
        <div class="row">
            <div class="col-md-8 offset-md-2">
                <h2 class="title text-center">Random Numbers Generator</h2>
            </div>
        </div>
        <div class="row">
            <div class="col-md-8 offset-md-2">
                <form id="startNumbersGeneratorForm">
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                <label for="from_balls">From Balls</label>
                                <input type="number" name="from_balls" class="form-control" value="5" aria-describedby="fromBallsHelp" min="0">
                                <small id="fromBallsHelp" class="form-text text-muted">Enter the maximum number for balls. Ex: 6.</small>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-group">
                                <label for="range_numbers">From Interval Numbers</label>
                                <input type="number" name="range_numbers" class="form-control" value="45" aria-describedby="rangeNumbersHelp" min="0">
                                <small id="rangeNumbersHelp" class="form-text text-muted">Enter the maximum value for interval of numbers. Ex: 49.</small>
                            </div>
                        </div>
                    </div>
                    <div class="row">   
                        <div class="col-md-6">
                            <div class="form-group">
                                <label for="extra_balls">Extra Balls</label>
                                <input type="number" name="extra_balls" class="form-control" value="1" aria-describedby="extraBallsHelp" min="0">
                                <small id="extraBallsHelp" class="form-text text-muted">Enter the maximum number for extra balls. Ex: 2.</small>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-group">
                                <label for="range_extra_numbers">Extra Interval Numbers</label>
                                <input type="number" name="range_extra_numbers" class="form-control" value="20" aria-describedby="rangeExtraNumbersHelp" min="0">
                                <small id="rangeExtraNumbersHelp" class="form-text text-muted">Enter the maximum value for interval of extra numbers. Ex: 20.</small>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <input type="submit" value="Generate Numbers" name="generate_numbers" class="btn btn-block">
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="generic-box generator numbers-generator">
            <div id="generatorResults" class="col-md-8 offset-md-2"></div>
        </div>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/numbers_generator.min.js"></script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Here is the complete CSS code of our main.css.

@charset "UTF-8";

/* GLOBALS AND RESETS */
html, body, div, span, h1, h2, h3, h4, h5, h6, p, a, img, strong, ul, li, form, br {
    margin:0;
    padding:0;
    border:0;
    font-size:100%;
    vertical-align:top;
}

*, *:before, *:after {
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
    box-sizing:border-box;
}

html {
    background:#d9dde2;
}

body {
    position:relative;
    font-size:1em;
    font-family:"Open Sans", sans-serif;
    -webkit-text-size-adjust:none;
    color:#293444;
    background:#eef2f8;
    font-weight:400;
    min-width:1200px;
}

sup {
    padding:0;
    margin:0;
    font-size:90%;
    line-height:normal;
}

a {
    text-decoration:none;
    color:#cd6a01;
    -webkit-transition:all 0.2s ease-in-out;
    -moz-transition:all 0.2s ease-in-out;
    -ms-transition:all 0.2s ease-in-out;
    -o-transition:all 0.2s ease-in-out;
    transition:all 0.2s ease-in-out;
}

a:hover {
    -webkit-transition:all 0.2s ease-in-out;
    -moz-transition:all 0.2s ease-in-out;
    -ms-transition:all 0.2s ease-in-out;
    -o-transition:all 0.2s ease-in-out;
    transition:all 0.2s ease-in-out;
    color: #FA0;
}

canvas {
    position:absolute;
    top:0;
    z-index:0;
}

a img {
    border:none;
}

li {
    list-style:none;
}

.img-left {
    float:left;
    margin:0 10px 10px 0 !important;
}

.img-right {
    float:right;
    margin:0 0 10px 10px !important;
}

.inline {
    display:inline-block;
}

.transition {
    -webkit-transition:all .2s ease-in-out;
    transition:all .2s ease-in-out;
}

.white {
    color:#FFF;
}

.red {
    color:#cc0000;
}

.btn {
    background:#ffea00;
    background:-moz-linear-gradient(top, #ffea00 0%, #ffbf00 100%);
    background:-webkit-linear-gradient(top, #ffea00 0%, #ffbf00 100%);
    background:linear-gradient(to bottom, #ffea00 0%, #ffbf00 100%);
}


ul {
    position:relative;
    list-style-type:none;
}

ul li {
    padding:6px 0 6px 35px;
    line-height:22px;
    margin-bottom:10px;
    position:relative;
}

ul li:before {
    content:"";
    width:26px;
    height:26px;
    background: url(/loto/img/icon-sprite.png) no-repeat 10.493% 9.346%;
    background-size:500px 1500px;
    position:absolute;
    top:5px;
    left:0px;
}

ul li a {
    color: #000;
}

/* TYPOGRAPHY */
h1,h2,h3,h4, .title {
    font:2.250em/48px Oswald, sans-serif;
    color:#ff5301;
    text-transform:uppercase;
    letter-spacing:1px;
}

h1 {
    margin-bottom:20px;
    font-weight:700;
}

h2 {
    font-size:1.750em;
    line-height:34px;
    margin-bottom:15px;
    padding-top:20px;
    font-weight:700;
}

h3, .title {
    font-size:1.5em;
    line-height:26px;
    margin-bottom:15px;
    padding-top:20px;
}

h4, .title {
    font-size:1.313em;
    line-height:24px;
    margin-bottom:15px;
    padding-top:20px;
}

p.white {
    color:#FFF;
}

.generic-box .large {
    font-size:1.65em;
}

p span {
    font-family:"open_bold", sans-serif;
}

.small {
    font-size:0.875em;
}

/* GENERAL CONTENT */
p {
    line-height:30px;
    margin-bottom:25px;
    letter-spacing:-0.5px;
}

/* BUTTONS & LINKS */
.btn {
    position:relative;
    font:1.3em/24px Oswald, sans-serif;
    text-transform:uppercase;
    text-align:center;
    text-decoration:none;
    padding:10px 15px;
    display:inline-block;
    z-index:0;
    border:none;
    cursor:pointer;
    border:1px solid #ffea00;
    -webkit-box-shadow:0 2px 3px 0 rgba(0, 0, 0, 0.5);
    box-shadow:0 2px 3px 0 rgba(0, 0, 0, 0.5);
    border-radius:4px;
    letter-spacing:1px;
    color:#000;
    font-weight:700;
}

.btn:hover, a:hover {
    background:#ffe651;
    background:-webkit-linear-gradient(#ffe651 0%, #ffa023 100%);
    background:-o-linear-gradient(#ffe651 0%, #ffa023 100%);
    background:linear-gradient(#ffe651 0%, #ffa023 100%); 
    color: #000;
}

.btn.green {
    background:#7ad85d;
    background:-moz-linear-gradient(top, #7ad85d 0%, #66b34e 100%);
    background:-webkit-linear-gradient(top, #7ad85d 0%, #66b34e 100%);
    background:linear-gradient(to bottom, #7ad85d 0%, #66b34e 100%);
    border-color:#82e463;
    color:#fff;
}

.btn.green:hover {
    background:#88ec69;
    background:-moz-linear-gradient(top, #88ec69 0%, #75cb5a 100%);
    background:-webkit-linear-gradient(top, #88ec69 0%, #75cb5a 100%);
    background:linear-gradient(to bottom, #88ec69 0%, #75cb5a 100%); 
    color: #FFF;
}

.btn-alt {
    background:#66b34e;
    padding:10px 15px;
    border-radius:4px;
    color:#fff;
    font:1.125em/18px Oswald, sans-serif;
    text-transform:uppercase;
    font-weight:700;
    letter-spacing:1px;
}

.btn-alt:hover {
    background:#76cd5b;
    color: #FFF;
}

.button-box {
    display:inline-block;
    padding:30px 0;
    width:100%;
}

.btn.btn-left {
    float:left;
    position:relative;
}

.btn.btn-right {
    float:right;
    position:relative;
}

.btn.disabled {
    background:#DDD;
    color:#AAA;
    border:1px solid #CCC;
    cursor:default !important;
}

.generic-box {
    display:inline-block;
    width:100%;
    margin-bottom:30px;
    padding:30px;
    position:relative;
    background:#f9f9f9;
    border:1px solid #e3e7ee;
    border-radius:4px;
}

.generic-box .box:last-child {
    border-right:none!important;
}

.generic-box h2 {
    padding-top:0;
}

/* BALL STYLES */
.balls {
    margin-bottom:40px;
}

.balls .ball,.balls .bonus, .ball:last-child {
    border-radius:65px;
    box-shadow:0 -5px 10px 0 rgba(0,0,0,0.5) inset;
    -webkikt-box-shadow:0 -10px 25px 0 rgba(0,0,0,0.5) inset;
    display:inline-block;
    font:1.125em/40px Oswald,sans-serif;
    height:40px;
    letter-spacing:-1px;
    position:relative;
    text-align:center;
    top:0;
    width:40px;
    background:url(/loto/img/icon-sprite.png) no-repeat 54.466% 0;
    background-size:500px 1500px;
    padding:0;
    margin-bottom:0;
    color:#fff;
}

.balls li:before, .ball:last-child:before {
    background:none;
}

.balls .ball:after, .balls .bonus:after {
    content:"";
    display:block;
    height:11px;
    position:absolute;
    bottom:-4px;
    width:40px;
    background:url(/loto/img/icon-sprite.png) no-repeat 54.526% 6.68%;
    background-size:500px 1500px;
}

.balls .bonus.extra {
    background-position:54.466% 3.425%;
    color:#293444;
}

.balls .bonus:before, .ball:last-child:before {
    width:40px;
    height:20px;
    font:11px/18px Oswald;
    color:#293444;
    letter-spacing:0;
    text-shadow:none;
    top:42px;
    line-height:12px;
}

.balls.big .bonus:before {
    top:56px;
    width:50px;
}

.balls.big .ball,.balls.big .bonus {
    background-size:650px 1950px;
    height:52px;
    width:52px;
    font-size:1.500em;
    line-height:54px;
    box-shadow:0 -5px 10px 0 rgba(0,0,0,0.3) inset;
    -webkikt-box-shadow:0 -10px 25px 0 rgba(0,0,0,0.3) inset;
}

.balls.big .ball:after, .balls.big .bonus:after {
    background-size:650px 1950px;
    height:17px;
    bottom:-8px;
    left:0px;
    width:50px;
}

/* NUMBERS GENERATOR */
.numbers-generator .balls .ball {
    background-color:#0b4cd7;
}

.numbers-generator .balls .bonus.extra {
    background-color:#ffdc00;
    color: #293444;
}

.numbers-generator .balls .bonus.extra:before {
    content:"Extra";
}

/* GENERATOR */
.generic-box.generator {
    padding:30px 0 0;
}

.generator .title {
    font-size:1.125em;
    color:inherit;
    margin-left:30px;
}

.generator .balls { 
    margin-left:15px;
}

.generic-box { 
    padding-bottom:15px;
}

/* ANIMATION */
.animated { 
    visibility:hidden;
}

/* GENERATOR */
.balls .innerA { 
    position:absolute;
    width:52px;
    height:52px;
    line-height:52px;
    padding:0;
    margin:0;
    left:0;
    top:0;
    display:block;
    overflow:hidden;
}

.balls .innerB, .balls .number { 
    position:relative;
    width:100%;
    height:100%;
}

.balls .innerB { 
    display:block;
}
Enter fullscreen mode Exit fullscreen mode

And our number_generator.js code:

$('#startNumbersGeneratorForm').on('submit', function(event){
    event.preventDefault();
    var resultsDiv = $('#generatorResults');
    $(resultsDiv).empty();
    var balls = parseInt($(this).find('input[name="from_balls"]').val());
    var from = parseInt($(this).find('input[name="range_numbers"]').val());
    var balls2 = parseInt($(this).find('input[name="extra_balls"]').val());
    var from_extra = parseInt($(this).find('input[name="range_extra_numbers"]').val());
    var numbers = new Array;

    for(let i = 1; i <= from; i++) numbers.push(i);
    if(from_extra > 0) {
        var extra_numbers = new Array;
        for(let i = 1; i <= from_extra; i++) extra_numbers.push(i); 
    }

    var resultsUl = document.createElement('ul');
    resultsUl.setAttribute('class', 'balls big');
    $(resultsDiv).append(resultsUl);

    if(balls2 > 0) {
        for(let i = 1; i <= balls; i++) {
            var ball = document.createElement('li');
            ball.setAttribute('class', 'ball');
            ball.setAttribute('id', 'B'+i);
            var innerA = document.createElement('span');
            innerA.setAttribute('class', 'innerA');
            var innerB = document.createElement('span');
            innerB.setAttribute('class', 'innerB');
            $(innerA).append(innerB);
            $(ball).append(innerA);
            $(resultsUl).append(ball);
        }
        for(let i = balls + 1; i <= balls + balls2; i++) {
            var extra = document.createElement('li');
            extra.setAttribute('class', 'bonus extra');
            extra.setAttribute('id', 'B'+i);
            var innerA = document.createElement('span');
            innerA.setAttribute('class', 'innerA');
            var innerB = document.createElement('span');
            innerB.setAttribute('class', 'innerB');
            $(innerA).append(innerB);
            $(extra).append(innerA);
            $(resultsUl).append(extra);
        }
        generate(balls, numbers, balls2, extra_numbers);
    } else {
        for(let i = 1; i <= balls; i++) {
            var ball = document.createElement('li');
            ball.setAttribute('class', 'ball');
            ball.setAttribute('id', 'B'+i);
            var innerA = document.createElement('span');
            innerA.setAttribute('class', 'innerA');
            var innerB = document.createElement('span');
            innerB.setAttribute('class', 'innerB');
            $(innerA).append(innerB);
            $(ball).append(innerA);
            $(resultsUl).append(ball);
        }
            generate(balls, numbers);
    }
});

function generate(balls, numbers, balls2=0, extra_numbers=0) { 
    $(".innerB").html("?"); 
    for (var i = 1; i < balls + balls2 + 1; i++){ 
        createNums($("#B" + i + " .innerB"), i, balls, numbers, balls2, extra_numbers); 
    } 
    for (var i = 1; i < balls + balls2 + 1; i++){ 
        moveNums($("#B" + i + " .innerB"), i, balls, numbers, balls2, extra_numbers); 
    }
}; 

function createNums(obj, idNum, balls, numbers, balls2, extra_numbers) {
    if (idNum <= balls) { 
        for (var i = 0; i < numbers.length * 2; i++){ 
            var chosen = Math.floor(Math.random() * numbers.length); 
            obj.append('<div class="number" id="ID_' + idNum + '-' + i + '">' + numbers[chosen] + '</div>'); 
        } 
    } else {
        if(extra_numbers.length > 0) {
            for (var j = 0; j < extra_numbers.length * 2; j++){ 
                var chosen = Math.floor(Math.random() * extra_numbers.length); 
                obj.append('<div class="number" id="ID_' + idNum + '-' + j + '">' + extra_numbers[chosen] + '</div>');
            } 
        }
    } 
}; 

function moveNums(obj, idNum, balls, numbers, balls2, extra_numbers) { 
    var time = 500;
    time += Math.round(Math.random() * 1000); 
    obj.stop(true, true); 
    obj.css('margin-top', '-2080px'); 
    var Duplicates = checkDuplicates(idNum, balls, numbers, balls2, extra_numbers); 
    while (Duplicates) {
        Duplicates = checkDuplicates(idNum, balls, numbers, balls2, extra_numbers)
    } 
    obj.animate( {"margin-top":"-1040px"}, {'duration': time, 'easing': 'swing'} ); 
}; 

function checkDuplicates(idNum, balls, numbers, balls2, extra_numbers) { 
    for (var i = 1; i < balls + 1; i++) { 
        if ( i != idNum && $('#ID_' + i + "-19").html() == $('#ID_' + idNum + "-19").html() ) { 
            $("#B" + idNum + " .innerB").html("?"); 
            createNums($("#B" + idNum + " .innerB"), idNum, balls, numbers, balls2, extra_numbers);
            return true; 
        } 
    } 
    if (balls2 > 1 && idNum > balls) { 
        for (var i = balls + 1; i < balls + balls2 + 1; i++) { 
            if ( i != idNum && $('#ID_' + i + "-19").html() == $('#ID_' + idNum + "-19").html() ) { 
                $("#B" + idNum + " .innerB").html("?");
                createNums($("#B" + idNum + " .innerB"), idNum, balls, numbers, balls2, extra_numbers); 
                return true; 

            } 
        } 
    }
    return false; 
};
Enter fullscreen mode Exit fullscreen mode

Developed by: MariusDiaconu

I hope this tutorial can help you. Kindly visit here https://codeanddeploy.com/blog/jquery/javascript-random-number-generator-using-jquery if you want to download this code.

Happy coding :)

Reinvent your career. Join DEV.

It takes one minute and is worth it for your career.

Okay, let's go

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay