【问题标题】:jQuery Validate Numeric After Pasting粘贴后jQuery验证数字
【发布时间】:2010-11-06 12:57:17
【问题描述】:

我知道如何验证数字值的字段,但是如果将无效字符粘贴到字段中,您如何验证该字段。通常我们有一个数字字段,然后是一个操作按钮,当单击操作按钮时,数字字段可能不会触发模糊事件。在这种情况下如何强制(重新)验证?是在action按钮的click事件中再做一次,还是有更优雅的解决方案?

【问题讨论】:

    标签: jquery validation copy-paste paste numeric


    【解决方案1】:

    并没有真正回答您关于粘贴的问题,而是提供了一个替代方案:您可以订阅表单的 submit 处理程序并在那里执行验证。更优雅的是使用jquery validation plugin,它将为您完成订阅工作,因此您只需要定义规则和错误消息:

    $(function() {
        $('#myform').validate({
            rules: {
                someFieldName: {
                    required: true,
                    number: true
                }
            },
            messages: {
                someFieldName: {
                    required: 'please enter a value',
                    number: 'please enter a valid number'
                }
            }
        });
    });
    

    【讨论】:

      【解决方案2】:

      我使用了这种验证....检查粘贴的文本,如果它包含字母,则向用户显示错误,然后在延迟后清除该框,以便用户检查文本并进行适当的更改。

      $('#txtbox').on('paste', function (e) {
          var $this = $(this);
          setTimeout(function (e) {
              if (($this.val()).match(/[^0-9]/g))
              {
                  $("#errormsg").html("Only Numerical Characters allowed").show().delay(2500).fadeOut("slow");                       
                  setTimeout(function (e) {
                      $this.val(null);
                  },2500);
              }                   
          }, 5);
      });
      

      【讨论】:

      • Darin 的回答是最佳实践,但我会接受您的回答,因为它特别适用于粘贴问题。只花了 6 年多的时间得到答案 LOL
      • 抱歉迟到了,我最近在我的一个应用程序中使用了这个东西......认为它可能会帮助其他人......
      【解决方案3】:

      我使用 paste 事件来触发 keyup 事件,因为只有使用 paste 事件我才能以某种方式获取输入,但我无法操纵给定的输入。这是我找到一种方法的方法(顺便说一句,我将其用于字母验证,但您也可以使用 input type = "number" 来验证数字)-

      $(".NumberValidateOnPaste").on('paste', function(e) {
        $(e.target).keyup();
      });
      
      $('.NumberValidateOnPaste').on('keyup',function(e){
          var value = $(this).val();
          var result = value.match(/^\d*$/);
          
          if(result == null){
            $(this).val('');
          }
          
      });
      <label for="Pin Code">Pin Code</label>
                      <input type="text" name="pin_code" class="form-control NumberValidateOnPaste">
                      
       <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>

      【讨论】:

      • 在输入值更新之前粘贴后有一个小的延迟,这可能是你没有得到值的原因。此外,这是一种非常低效的匹配方式,您可以在值本身上调用.match()。此外,这是一个非常过时的 jQuery 版本。
      猜你喜欢
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      相关资源
      最近更新 更多