I have a lottery number generator that allows you to generate 6 random numbers between 1 and 49.
How can I change the background colour of a div depending on it's containing <p>
tag value/number when it has been generated?
I have attached my code so far of the lottery generator. I just need the red background colour to change depending on the number result, like so:
- 1-9: White
- 10-19: Blue
- 20-29: Ping
- 30-39: Green
- 40-49: Yellow
CodePen Example
Here is my JavaScript so far for the number generation:-
$("#buttonGen").click(function() {
$(".circle .result1").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result2").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result3").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result4").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result5").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result6").html((Math.floor(Math.random() * 49) + 1));
});
I have a lottery number generator that allows you to generate 6 random numbers between 1 and 49.
How can I change the background colour of a div depending on it's containing <p>
tag value/number when it has been generated?
I have attached my code so far of the lottery generator. I just need the red background colour to change depending on the number result, like so:
- 1-9: White
- 10-19: Blue
- 20-29: Ping
- 30-39: Green
- 40-49: Yellow
CodePen Example
Here is my JavaScript so far for the number generation:-
$("#buttonGen").click(function() {
$(".circle .result1").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result2").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result3").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result4").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result5").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result6").html((Math.floor(Math.random() * 49) + 1));
});
Share
Improve this question
edited Jul 19, 2017 at 13:11
Death-is-the-real-truth
72.3k10 gold badges57 silver badges104 bronze badges
asked Jul 19, 2017 at 12:55
Charlie McShaneCharlie McShane
3174 silver badges19 bronze badges
6
- 1 What have you tried so far? Where have you attempted to change the background or check the values? – NewToJS Commented Jul 19, 2017 at 12:58
- I have made no attempts so far :( – Charlie McShane Commented Jul 19, 2017 at 12:58
- So generate the number, add if statements to get color, set background color, set text. – epascarello Commented Jul 19, 2017 at 12:59
- @CharlieMcShane Then I suggest you try something? – NewToJS Commented Jul 19, 2017 at 13:01
- @CharlieMcShane Try codepen.io/anon/pen/YQoYpe – Carsten Løvbo Andersen Commented Jul 19, 2017 at 13:03
5 Answers
Reset to default 3To do what you require you can first apply the same class to all the .resultN
elements. This will DRY up your code by allowing you to use a single call to html()
to affect all the elements.
You can then set their random value, and also use a switch
statement to change their background colour based on that value. Try this:
$("#buttonGen").click(function() {
$(".circle .result").text(function() {
var value = parseInt(Math.floor(Math.random() * 49) + 1), bgColour;
switch (true) {
case (value < 10): bgColour = 'white'; break;
case (value < 20): bgColour = 'blue'; break;
case (value < 30): bgColour = 'pink'; break;
case (value < 40): bgColour = 'green'; break;
case (value < 50): bgColour = 'yellow'; break;
}
$(this).closest('.circle').css('background-color', bgColour);
return value;
});
});
.__hero-container .title {
margin-bottom: 30px;
}
.__hero-container .numbers .circle {
background-color: red;
border-radius: 50px;
height: 90px;
}
.__hero-container .numbers .circle p {
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
.__hero-container .button {
margin-top: 30px;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare./ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare./ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="__hero-container">
<div class="container title">
<div class="col-md-12 text-center">
<h1>Lottery Generator</h1>
</div>
</div>
<div class="container text-center numbers">
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result">0</p>
</div>
</div>
</div>
<div class="container button">
<div class="col-md-12 text-center">
<button id="buttonGen">Generate</button>
</div>
</div>
</div>
You can use .each()
for this. check updated snippet below..
$("#buttonGen").click(function() {
$(".circle .result1").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result2").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result3").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result4").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result5").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result6").html((Math.floor(Math.random() * 49) + 1));
$('.circle').each(function(){
var numResult = parseInt($(this).find('p').html());
if(numResult >=1 && numResult <=9) {
$(this).css('background','white');
} else if (numResult >=10 && numResult <=19) {
$(this).css('background','blue');
} else if (numResult >=20 && numResult <=29) {
$(this).css('background','pink');
} else if (numResult >=30 && numResult <=39) {
$(this).css('background','green');
} else if (numResult >=40 && numResult <=49) {
$(this).css('background','yellow');
}
})
})
.__hero-container .title {
margin-bottom: 30px;
}
.__hero-container .numbers .circle {
background-color: red;
border-radius: 50px;
height: 90px;
border: 1px solid #000;
}
.__hero-container .numbers .circle p {
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
.__hero-container .button {
margin-top: 30px;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn./bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Latest piled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn./bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div class="__hero-container">
<div class="container title">
<div class="col-md-12 text-center">
<h1>Lottery Generator</h1>
</div>
</div>
<div class="container text-center numbers">
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result1">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result2">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result3">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result4">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result5">0</p>
</div>
</div>
<div class="col-md-2 col-xs-2 text-center">
<div class="circle">
<p class="result6">0</p>
</div>
</div>
</div>
<div class="container button">
<div class="col-md-12 text-center">
<button id="buttonGen">Generate</button>
</div>
</div>
</div>
Just add a loop for all the elements checking the content and then add a the specific background
$( ".circle p" ).each(function(index) {
if ($(this).html()>0 && $(this).html()<10){
$(this).parent().css("background","black");
}else if ($(this).html()>9 && $(this).html()<20){
$(this).parent().css("background","blue");
}
//continue the rest for Ping, Green and Yellow
});
This will help you, just add the other validations...
$("#buttonGen").click(function() {
$(".result1").html((Math.floor(Math.random() * 49) + 1));
$(".result2").html((Math.floor(Math.random() * 49) + 1));
$(".result3").html((Math.floor(Math.random() * 49) + 1));
verifyContent();
});
function verifyContent() {
$('.circle').each(function(i, obj) {
var content = $(this).html();
//console.log(content);
if (content > 10 && content < 19) {
$(this).css("background", "blue");
} else {
$(this).css("background", "white");
}
});
}
.circle {
height: 150px;
width: 150px;
border: 1px solid black;
border-radius: 50%;
display: inline-block;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="buttonGen">Generate</button><br><br>
<div class="circle result1"></div>
<div class="circle result2"></div>
<div class="circle result3"></div>
I'd probably have a function after the setting of the html that will determine the color based on it.
$("#buttonGen").click(function() {
$(".circle .result1").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result2").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result3").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result4").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result5").html((Math.floor(Math.random() * 49) + 1));
$(".circle .result6").html((Math.floor(Math.random() * 49) + 1));
determineColor();
});
function determineColor(){
$(".circle").each(function(index, value){
var color = getColorValue(value);
$(this).css("background-color", color)
}
}
function getColorValue(value){
if(value > 1 && value < 9){
return "white";
}
// add others
}