I have a simple form that i'm posting via Ajax. I have already set up validation messages in the controller. below is the view form and ajax handling it:
$('.sounds-artist-signup').on('click', function(){
var firstnameInput = "#artistSignup input[name='firstname']";
var lastnameInput = "#artistSignup input[name='lastname']";
$.ajax({
type: "POST",
url: $(this).closest('form').attr('action'),
data: { firstname: $('#firstname').val(), lastname: $('#lastname').val()},
beforeSend: function() {
$(".sounds-artist-signup").prop('disabled', true);
},
}).done(function(data){
console.log(data);
}).fail(function(xhr, textStatus, errorThrown) {
if($('input[name="firstname"]').val().length == 0)
{
if(xhr.status == 422)
{
$(firstnameInput).addClass('is-invalid');
$('.invalid-feedback').text(xhr.responseJSON.errors.firstname["0"]).css('font-size','0.9rem');
}
}
if($('input[name="lastname"]').val().length == 0)
{
if(xhr.status == 422)
{
$(lastnameInput).addClass('is-invalid');
$('.invalid-feedback').text(xhr.responseJSON.errors.lastname["0"]).css('font-size','0.9rem');
}
}
$(".sounds-artist-signup").prop('disabled', false);
});
return false;
});
<form id="artistSignup" method="POST" action="{{ route('register') }}">
@csrf
<div class="form-group">
<div class="input-group icon">
<input type="text" class="form-control{{ $errors->has('firstname') ? ' is-invalid' : '' }}" name="firstname" id="firstname" placeholder="Firstname" required="required">
<span class="invalid-feedback"></span>
</div>
</div>
<div class="form-group">
<div class="input-group icon">
<input type="text" class="form-control{{ $errors->has('lastname') ? ' is-invalid' : '' }}" name="lastname" id="lastname" placeholder="Lastname" required="required"> <span class="invalid-feedback"></span>
</div>
</div>
<div class="form-group sign">
<button type="submit" class="btn btn-primary login-btn btn-block sounds-artist-signup">Sign UP</button>
</div>
</form>
Whats happening is: if i click on the 'Sign up' button without filling in the form, validation error message is shown but both display for lastname i.e
what's going on here? kindly assist

return falseto prevent default form action