javascript - jQuery 如何在输入字段为空时禁用点击功能

标签 javascript jquery html css

И 有一些步骤卡,其中有输入字段。对于每张卡片,我都有一个“下一步” 按钮来改变 View 。

但如果表单中有空输入字段,我想阻止此按钮。

代码:

var $currentCard, $nextCard, $prevCard;

var animationEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
var operationName = ["Order number", "Oparation 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>

如您所见,我有一个功能来检查某些输入字段是否为空,当我按下 Next 时,它会转到下一页。

我需要的是在继续之前按下一步按钮验证输入字段是否已填写。

最佳答案

我添加了这段 jQuery 代码:

if($('.POBarcode').is(":visible")){
  if($('.POBarcode').val().length == 0) return false;
}
if($('.Operation_barcode').is(":visible")){
  if($('.Operation_barcode').val().length == 0) return false;
}

我还向以下元素添加了一个

<input type="text" class="POBarcode" placeholder="PO barcode">
<input type="text" placeholder="Operation barcode" class="Operation_barcode">

现在,在 可见input 具有 value 之前,您无法按下一个按钮。

工作演示

var $currentCard, $nextCard, $prevCard;

var animationEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
var operationName = ["Order number", "Oparation barcode", "Nest number", "Layers number", "Cycles number"];

$('.next').on('click', function(e) {
  e.preventDefault();
  
  if($('.POBarcode').is(":visible")){
    if($('.POBarcode').val().length == 0) return false;
  }
  if($('.Operation_barcode').is(":visible")){
    if($('.Operation_barcode').val().length == 0) return false;
  }
  
  $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" class="POBarcode" 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" class="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>

关于javascript - jQuery 如何在输入字段为空时禁用点击功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162156/

相关文章:

jquery - 相当于纯 Javascript 的 jQuery.active

javascript - 让李选择复选框

javascript - HTML5 Canvas 问题?

java - 如何在 Android 上将 xml 转换为 html?

javascript - 正则表达式样式表超出字符串范围

jquery - 如何使用 jquery 和换行符填充文本区域?

javascript - NG-Table ng-repeat 嵌套值

php - 查询从多个表中获取数据 MySQL

javascript - 在 JavaScript 中转换日期

javascript - 当对象可能是字符串时使用 'in'