Get the number of edited inputs |
Get the number of edited inputs |
RainLover |
Mar 5 2019, 08:19 AM
Post
#1
|
Advanced Member Group: Members Posts: 216 Joined: 16-November 09 Member No.: 10,346 |
Scenario
Every semester my students need to take at least one test. The following form gives the right average grade of a student: CODE <!DOCTYPE html> <html lang="en"> <head> <title>Average Grade</title> </head> <body> <form> Math: <input type="number" id="test1"> <input type="number" id="test2"> <input type="number" id="test3"> <output id="average"></output> <br> <input type="button" value="Calculate" id="calcBtn"> </form> <script> document.getElementById('calcBtn').addEventListener('click', function() { var test1 = document.getElementById('test1').value; var test2 = document.getElementById('test2').value; var test3 = document.getElementById('test3').value; var average = document.getElementById('average'); average.value = (Number(test1)+Number(test2)+Number(test3)) / 3; }); </script> </body> </html> The problem is it works right only if all the fields are edited. If the student doesn't take some tests, the average grade won't show the right value. I know it's because of dividing by the fixed number 3 when it calculates the average grade: CODE average.value = (Number(test1)+Number(test2)+Number(test3)) / 3; Question What is a simple approach to get the number of changed input fields? |
Christian J |
Mar 8 2019, 02:12 PM
Post
#2
|
. Group: WDG Moderators Posts: 9,656 Joined: 10-August 06 Member No.: 7 |
Here's one with a regex instead of isNaN:
CODE Math: <input type="number" class="test"> <input type="number" class="test"> <input type="number" class="test"> Average grade: <span id="average"></span> <br> <input type="button" value="Calculate" id="calcBtn"> <script> document.getElementById('calcBtn').addEventListener('click', function() { // any number of elements var test_input=document.getElementsByClassName('test'); var grades_arr=new Array(); for(var i=0; i<test_input.length; i++) { var val=test_input[i].value; // remove numerical characters from sample, to see if any invalid characters remain var invalid=val.replace(/[0-9]/g,''); if(val.length>0 && invalid.length==0) // at least one character must be entered, but no invalid characters { val=1*val; // convert to number type grades_arr.push(val); // add valid number values to array } else { //alert('Field '+i+' is empty or invalid'); } } // calculate average if(grades_arr.length>0) // at least one form field must be filled in correctly by user { var grades=0; for(var i=0; i<grades_arr.length; i++) { grades=grades+grades_arr[i]; } grades=grades/grades_arr.length; document.getElementById('average').innerHTML=grades; } else { //alert('No valid data was entered'); } } ); </script> |
Lo-Fi Version | Time is now: 24th April 2024 - 08:47 PM |