首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于OTP输入字段,只有当所有6个数字都被填充时,才启用按钮。

对于OTP输入字段,只有当所有6个数字都被填充时,才启用按钮。
EN

Stack Overflow用户
提问于 2020-12-15 16:38:49
回答 3查看 5.2K关注 0票数 0

我有一个OTP表单字段,其中有一个禁用的“确认”按钮。只有当所有6位数字都被填充时,才能启用按钮。

HTML:

代码语言:javascript
复制
<div id="otp" class="flex form-otp text-center pb-3">
    <input class="text-center form-control" type="text" id="digit-1" name="digit-1" data-next="digit-2" maxlength="1" />
    <input class="text-center form-control" type="text" id="digit-2" name="digit-2" data-next="digit-3" data-previous="digit-1" maxlength="1" />
    <input class="text-center form-control" type="text" id="digit-3" name="digit-3" data-next="digit-4" data-previous="digit-2" maxlength="1" />
    <input class="text-center form-control" type="text" id="digit-4" name="digit-4" data-next="digit-5" data-previous="digit-3" maxlength="1" />
    <input class="text-center form-control" type="text" id="digit-5" name="digit-5" data-next="digit-6" data-previous="digit-4" maxlength="1" />
    <input class="text-center form-control" type="text" id="digit-6" name="digit-6" data-previous="digit-5" maxlength="1" />
</div>
<button type="submit" class="btn js-otp-confirm disabled"> confirm </button>

我在下面的JQuery代码中使用了.is(‘:空’),但是它不起作用.有人能指点我我做错了什么吗?

代码语言:javascript
复制
$('.form-otp').find('input').each(function() {
    $(this).on('keyup', function(e) {
        var parent = $($(this).parent());
            if(e.keyCode === 8 || e.keyCode === 37) {
                var prev = parent.find('input#' + $(this).data('previous'));
                if(prev.length) {
                    $(prev).select();
                }
            } else if((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 65 && e.keyCode <= 90) || (e.keyCode >= 96 && e.keyCode <= 105) || e.keyCode === 39) {
                var next = parent.find('input#' + $(this).data('next'));
                if(next.length) {
                    $(next).select();
                }
            }
        if ($(this).is(':empty')) {
            $('.js-otp-confirm').addClass('disabled');
        } else {
            $('.js-otp-confirm').removeClass('disabled');
        }
    });
});
EN

回答 3

Stack Overflow用户

发布于 2020-12-15 17:13:42

下面是我更新的脚本

代码语言:javascript
复制
$('.form-otp').find('input').each(function() {
    $(this).on('keyup', function(e) {
      var parent = $($(this).parent());
      if (e.keyCode === 8 || e.keyCode === 37) {
        var prev = parent.find('input#' + $(this).data('previous'));
        if (prev.length) {
          $(prev).select();
        }
      } else if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 65 && e.keyCode <= 90) || (e.keyCode >= 96 && e.keyCode <= 105) || e.keyCode === 39) {
        var next = parent.find('input#' + $(this).data('next'));
        if (next.length) {
          $(next).select();
        }
      }
      var counter = 0;
      $('.form-otp').find('input').each(function() {
        if ($(this).val() == '') {
          counter++;
        } else {

        }
      });

      if (counter > 0) {
        $('.js-otp-confirm').addClass('disabled');
      } else {
        $('.js-otp-confirm').removeClass('disabled');
      }
    });
  });
票数 0
EN

Stack Overflow用户

发布于 2020-12-15 17:57:46

使用它们来验证.

代码语言:javascript
复制
$(document).ready(function(){
  var count = 0;
  $('.otp').change(function(){
  $('#otp input[type=text]').each(function(){
      if($(this).val().length !== 0) {
          count = count + 1;
       }
  });
  if(count === 21){
    $('#btn-active').removeClass('disabled');
  } else {
    $('#btn-active').addClass('disabled');
  }
  })
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">

<div id="otp" class="flex form-otp text-center pb-3">
    <input class="text-center form-control otp" type="text" id="digit-1" name="digit-1" data-next="digit-2" maxlength="1" />
    <input class="text-center form-control otp" type="text" id="digit-2" name="digit-2" data-next="digit-3" data-previous="digit-1" maxlength="1" />
    <input class="text-center form-control otp" type="text" id="digit-3" name="digit-3" data-next="digit-4" data-previous="digit-2" maxlength="1" />
    <input class="text-center form-control otp" type="text" id="digit-4" name="digit-4" data-next="digit-5" data-previous="digit-3" maxlength="1" />
    <input class="text-center form-control otp" type="text" id="digit-5" name="digit-5" data-next="digit-6" data-previous="digit-4" maxlength="1" />
    <input class="text-center form-control otp" type="text" id="digit-6" name="digit-6" data-previous="digit-5" maxlength="1" />
</div>
<button type="submit" id="btn-active" class="btn js-otp-confirm disabled"> confirm </button>

票数 0
EN

Stack Overflow用户

发布于 2020-12-26 13:32:50

用1行滤波函数解析。

代码语言:javascript
复制
   $('.muse-otp').find('input').each(function () {
    $(this).on('keyup', function (e) {
        var parent = $($(this).parent());
        if (e.keyCode === 8 || e.keyCode === 37) {
            var prev = parent.find('input#' + $(this).data('previous'));
            if (prev.length) {
                $(prev).select();
            }
        } else if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 65 && e.keyCode <= 90) || (e.keyCode >= 96 && e.keyCode <= 105) || e.keyCode === 39) {
            var next = parent.find('input#' + $(this).data('next'));
            if (next.length) {
                $(next).select();
            }
        }
        if ($('.muse-otp').find('input').filter(function () { return this.value === ''; }).length === 0) {
            $('.js-otp-confirm').removeClass('disabled');
        } else {
            $('.js-otp-confirm').addClass('disabled');
        }
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65310007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档