Reputation: 431
I'm trying to build a website, where I have two select tag and both tags have the same options(origin and destination) so both select tag can't have the same submitted options. my question is how can I validate if the user send same value options?
I tried doing some code to validate it, but it doesn't work since I'm new at javascript I don't know what else to do. thank you in advance!
console.clear()
function submitForm() {
var origin = document.getElementById("origin").value;
var destination = document.getElementById("destination").value;
if (origin == destination) {
alert("origin and destination can't be the same");
}
}
<form action="">
<select name="origin" id="origin">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<select name="destination" id="destination">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<input type="submit" value="submit" onsubmit="submitForm()">
</form>
my expected output is that there should be an alert message that select(origin) and select (destination) must not have the same value and so the user can't submit the form.
Upvotes: 0
Views: 117
Reputation: 33439
Move the onsubmit
to the form:
console.clear()
function submitForm(e) {
var origin = e.target.querySelector("[name=origin]").value;
var destination = e.target.querySelector("[name=destination]").value;
if (origin == destination) {
e.stopPropagation()
e.preventDefault()
alert("origin and destination can't be the same");
return false;
}
}
<form action="#" onsubmit="submitForm(event)">
<select name="origin">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<select name="destination">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<input type="submit" value="submit">
</form>
Or better, use addEventListener
console.clear()
function submitForm(e) {
var origin = e.target.querySelector("[name=origin]").value;
var destination = e.target.querySelector("[name=destination]").value;
if (origin == destination) {
e.stopPropagation()
e.preventDefault()
alert("origin and destination can't be the same");
return false;
}
}
document.getElementById('flight').addEventListener('submit', submitForm)
<form action="#" id="flight">
<select name="origin">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<select name="destination">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<input type="submit" value="submit">
</form>
Upvotes: 2
Reputation: 537
What about this, you don't need to submit the form to validate it in this case:
<script>
function validateForm(){
var origin = document.getElementById("origin");
var destination = document.getElementById("destination");
if(origin.value == destination.value){
alert("origin and destination can't be the same");
}
}
</script>
<form action="">
<select name="origin" id="origin">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<select name="destination" id="destination">
<option value="manila">manila</option>
<option value="QC">QC</option>
<option value="makati">Makati</option>
<option value="marikina">marikina</option>
</select>
<input type="button" value="Validate" onclick="validateForm()">
</form>
Upvotes: 0
Reputation: 989
Although there are many other ways to achieve this, this one should actually work. Tiny detail you have missed:
onsubmit
belongs to the <form>
and not to the <input>
!
<form action="" onsubmit="submitForm()">
Upvotes: 2