Reputation: 29
I have a problem in this code. When i run it, and after that i insert a two digits number, the script separates it. Ex.: enter 12 shows 1 even and 1 odd; enter 26 shows 2 even; I want it to be mixed, so if i enter a two digits number or more (ex.432152) that needs to be 1 sum, 1 value, and show as 1 even number. Thank you for the opportunity to ask for help here!
function countfromzero() {
if (document.getElementById("maintextbox").value !="") {
CalculateNumbers();
}
}
function CalculateNumbers() {
var arr = [];
var asd = 0;
var evn = 0;
arr = document.getElementById("maintextbox").value;
arr = arr.replace(/, | /g, "");
for (i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
asd++;
}
else {
evn++;
}
}
document.getElementById("eventextbox").value = evn;
document.getElementById("oddtextbox").value = asd;
}
<input type="text" name="maintextbox" id="maintextbox">
<input type="button" id="buttton" name="Process" value="Process" onclick="countfromzero();"><br>
Even:<input type="text" name="eventextbox" id="eventextbox"><br>
Odd:<input type="text" name="oddtextbox" id="oddtextbox">
Upvotes: 0
Views: 38
Reputation: 651
Consider HerrSerker's Answer since it's optimized to allow sequences of numbers, while mine doesn't
You treated your number as an array, and your for-loop
iterated through each digit in your number to check if it's even or odd.
You just have to get rid of the loop, and change your "arr" to not be an array anymore.
function countfromzero() {
if (document.getElementById("maintextbox").value != "") {
CalculateNumbers();
}
}
function CalculateNumbers() {
var arr;
var asd = 0;
var evn = 0;
arr = document.getElementById("maintextbox").value;
arr = arr.replace(/, | /g, "");
if (arr % 2 != 0) {
asd++;
} else {
evn++;
}
document.getElementById("eventextbox").value = evn;
document.getElementById("oddtextbox").value = asd;
}
<input type="text" name="maintextbox" id="maintextbox">
<input type="button" id="buttton" name="Process" value="Process" onclick="countfromzero();"> Even:
<input type="text" name="eventextbox" id="eventextbox"> Odd:
<input type="text" name="oddtextbox" id="oddtextbox">
Upvotes: 0
Reputation: 33439
Your arr
variable is not an array as you apparently wanted it to be.
Change the replace
method to a split
method (with a slightly different RegEx) and you are done
function countfromzero() {
if (document.getElementById("maintextbox").value !="") {
CalculateNumbers();
}
}
function CalculateNumbers() {
var arr = [];
var asd = 0;
var evn = 0;
var str = document.getElementById("maintextbox").value;
arr = str.split(/[^\d]+/g);
for (i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
asd++;
}
else {
evn++;
}
}
document.getElementById("eventextbox").value = evn;
document.getElementById("oddtextbox").value = asd;
}
<input type="text" name="maintextbox" id="maintextbox" value="432152">
<input type="button" id="buttton" name="Process" value="Process" onclick="countfromzero();"><br>
Even:<input type="text" name="eventextbox" id="eventextbox"><br>
Odd:<input type="text" name="oddtextbox" id="oddtextbox">
Upvotes: 1