I have a form that, with JS, has an error message that is meant to appear when one or more of the fields in the form are left empty. However, when I click the submit button, nothing appears. HTML:
<body>
<script type=text/javascript src="script.js"></script>
<h1>Organisation Score Calculator</h1>
<!--
<h4>Input the name of the charity.</h4>
<input type="text" id="nameOfOrganisation">
<h4>Which state/territory does this organisation service?</h4>
<input type="text" id="state">
<h4>What is the ACNC listed size for this organisation?</h4>
<input type="text" id="size">
<h4>What percentage of the organisation's total income is from government grants?</h4>
<input type="text" id="governmentGrants">
<h4>How much net profit does the organisation make annuallly?</h4>
<input type="text" id="netProfit">
<h4>What is the value of the organisation's investments?</h4>
<input type="text" id="investments">
<br>
<br>
<button onclick="main()">Get score!</button>
-->
<form id="regForm">
<div class="textinput">
<label for="nameOfOrganisation">Input the name of the organisation.</label><br><br>
<input id="nameOfOrganisation" type="text" name="nameOfOrganisation"/>
</div>
<br>
<br>
<br>
<div class="textinput">
<label for="state">Which state/territory does this organisation service?</label><br><br>
<input id="state" type="text" name="state"/>
</div>
<br>
<br>
<br>
<div class="textinput">
<label for="size">What is the ACNC listed size for this organisation?</label><br><br>
<input id="size" type="text" name="size"/>
</div>
<br>
<br>
<br>
<div class="textinput">
<label for="governmentGrants">What percentage of the organisation's total income is from government grants?</label><br><br>
<input id="governmentGrants" type="text" name="governmentGrants"/>
</div>
<br>
<br>
<br>
<div class="textinput">
<label for="netProfit">How much net profit does the organisation make annuallly?</label><br><br>
<input id="netProfit" type="text" name="netProfit"/>
</div>
<br>
<br>
<br>
<div class="textinput">
<label for="investments">What is the value of the organisation's investments?</label><br><br>
<input id="investments" type="text" name="investments"/>
</div>
<br>
<br>
<br>
<input type="submit" value="Get score!">
</form>
<p id="namePlaceholder"></p>
<p id="statePlaceholder"></p>
<p id="sizePlaceholder"></p>
<p id="governmentGrantsPlaceholder"></p>
<p id=netProfitPlaceholder></p>
<p id="investmentsPlaceholder"></p>
<h4 id="total"></h4>
</body>
JS:
function validate () {
var name = docuemnt.getElementById("nameOfOrganisation").value;
var state = docuemnt.getElementById("state").value;
var size = document.getElementById("size").value;
var governmentGrants = document.getElementById("governmentGrants").value;
var netProfit = document.getElementById("netProfit").value;
var investments = document.getElementById("investments").value;
var errMsg = "";
var result = true;
if (name == "") {
errMsg += "Name cannot be empty.n";
}
if (state == "") {
errMsg += "State cannot be empty.";
}
if (size == "") {
errMsg += "Size cannot be empty.n";
}
if (governmentGrants == "") {
errMsg += "Government grants cannot be empty.n";
}
if (netProfit == "") {
errMsg += "Net profit cannot be empty.n";
}
if (investments == "") {
errMsg += "Investments cannot be empty.n";
}
if (errMsg != "") {
alert (errMsg);
result = false;
}
return result;
}
function init () {
var regForm = document.getElementById("regForm");
regForm.onsubmit = validate();
}
window.onload = init();
I am very new to JS and would appreciate it if anyone could tell me where I’ve gone wrong here. I have tried changing the function calls in init and below it to include brackets but that did not seem to help at all.
3
Answers
It’s just a simple typo in your code causing it all to fail.
You spelled
document
asdocuemnt
, which causes your function to silently throw an error and thus it doesn’t run the rest of the function, causing the alert to never happen.You will still face another problem when you fix this… And that is that the form will still run as if it were successful and valid data. So you will want to update your function to include an event parameter and prevent the default action (of a successful submition). That is usually referenced as
e.preventDefault()
but could beevent.preventDefault()
if you named your parameter event. Your JS code would look like this with that in place.You can read more about this here
first of all change
to
move script reference inside the
<html><head>
part, with thedefer
attributehttps://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#defer
You could make the
validate
function slightly more refined if you were to remove all the hardcoded references to input fields and use a loop. You can easily find all the input elements within the form –document.querySelectorAll
is ideal for this task or you could use the olderform.elements
and iterate through that nodelist.Either way you can apply the same logic test ( in this case you test for empty strings ) whilst iterating though the nodelist. In the below I opted for adding errors to an array but string concatenation is a valid alternative.