I have step cards with input fields on each card. A "Next" button is provided for each card to change the view.
However, I need to prevent the "Next" button from functioning if any input fields on the form are left empty.
Below is the code snippet:
var $currentCard, $nextCard, $prevCard;
var animationEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
var operationName = ["Order number", "Operation barcode", "Nest number", "Layers number", "Cycles number"];
$('.next').on('click', function (e) {
e.preventDefault();
$currentCard = $(this).parent().parent();
$nextCard = $currentCard.next();
$('#bar li').eq($('.card').index($nextCard)).addClass('active');
var inAnimation = 'animated slideInLeft';
$currentCard.hide();
$nextCard
.show()
.addClass(inAnimation)
.one(animationEvents, function () {
$(this).removeClass(inAnimation);
});
});
$('.prev').on('click', function (e) {
e.preventDefault();
$currentCard = $(this).parent().parent();
$prevCard = $currentCard.prev();
$('#bar li').eq($('.card').index($currentCard)).removeClass('active');
var inAnimation = 'animated slideInRight';
$currentCard.hide();
$prevCard
.show()
.addClass(inAnimation)
.one(animationEvents, function () {
$(this).removeClass(inAnimation);
});
});
.title {
margin-bottom: 30px;
color: #020304;
}
.card {
max-width: 500px;
width: 90%;
background: white;
margin: 50px ;
padding: 20px 30px;
border-radius: 2px;
-webkit-animation-duration: 0.2s;
animation-duration: 0.2s;
}
.cardTitle {
text-align: center;
text-transform: uppercase;
margin: 0;
}
.cardText {
margin: 25px 0 40px 0;
color: grey;
text-align:center;
}
.card:not(:first-of-type) {
display: none;
}
.actions {
text-align: center;
}
.btn {
width: 200px;
background: #ffd42a;
font-weight: bold;
font-size: 14px;
color: #000;
display: inline-block;
text-decoration: none;
text-align: center;
border-radius: 2px;
padding: 10px 5px;
margin: 10px 5px;
}
.btn:hover {
box-shadow: 0 0 0 2px white, 0 0 0 3px #27AE60;
}
.barContainer {
width: 100%;
text-align: center;
}
.bar {
counter-reset: step;
margin: 0;
}
.bar li {
list-style-type: none;
float: left;
width: 20%;
position: relative;
text-align: center;
font-size: 9px;
color: white;
}
@media all and (min-width: 500px) {
.bar li {
text-transform: uppercase;
font-size: 10px;
}
}
.bar li:before {
content: counter(step);
counter-increment: step;
width: 30px;
height: 30px;
line-height: 30px;
font-size: 14px;
border: 1px solid #ddd;
display: block;
text-align: center;
margin: 0 auto 10px auto;
border-radius: 50%;
background-color: white;
color: #333;
}
.bar li:after {
content: '';
position: absolute;
width: 100%;
height: 2px;
background: #ffed2b;
top: 15px;
left: -50%;
z-index: -1;
}
.bar li:first-child:after {
content: none;
}
.bar li.active:before {
background: #ffd42a;
border: 1px solid #ffd42a;
color: #000;
}
.bar li.active + li.active:after {
background: #27AE60;
}
.bar li.active:first-child + li:after:not(.active) {
background: white;
}
.input-style {
margin: 20px auto;
width: 86%;
height: 40px;
position: relative;
border-bottom: 1px solid #ccc;
text-align: center;
}
.input-style input {
width: 86%;
height: 100%;
padding: 0px 10px;
border: none;
font-size: 22px;
text-align:center;
outline: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<ul class="bar" id="bar">
<li class="active">Register new PO</li>
<li>Scan PO barcode</li>
<li>Scan Operation barcode</li>
</ul>
</div>
<section id="cards">
<div class="card">
<h3 class="cardTitle">Register new PO</h3>
<p class="cardText">Some description</p>
<div class="actions">
<a href="#" class="btn next startCO">Register new PO</a>
</div>
</div>
<div class="card" id="CoStep1">
<h3 class="cardTitle">Scan PO barcode</h3>
<p class="cardText">Some description</p>
<div class="input-style">
<input type="text" placeholder="PO barcode">
<div class="style"></div>
</div>
<div class="actions">
<a href="#" class="btn prev">Prev</a>
<a href="#" class="btn next coButton">Next</a>
</div>
</div>
<div class="card" id="CoStep2">
<h3 class="cardTitle">Scan Operation barcode</h3>
<p class="cardText">Some description</p>
<div class="input-style">
<input type="text" placeholder="Operation barcode"> <button class="plusButton">+</button>
<div class="style"></div>
</div>
<div class="actions">
<a href="#" class="btn prev">Prev</a>
<a href="#" class="btn next coButton startCO">Start CO</a>
</div>
</div>
</section>
While I already have a function in place to check for empty input fields, the "Next" button proceeds to the next page without validation.
My requirement is to add validation to the "Next" button, ensuring the input fields are filled before advancing.