如何防止用户使用 jQuery 以最大长度输入值

How to prevent User to enter value at maxlength using jQuery

如果用户在输入框中有超过 5 个逗号分隔值,我希望他不能输入文本。

我已经达到了这个值,但不确定。我认为 maxlength 动态应该可以解决问题。

我正在尝试应用以下代码,但不起作用 -

require(["jquery"],function($) {
    $("input.toEmail").keyup(function(e){
        var inputEmail = $("input.toEmail").val();
        var count = (inputEmail.match(/,/g) || []).length;  
        if(count >= 5){
            e.preventDefault();
            e.stopPropagation();
        }
    });
});

这不是经过测试的代码,但您可能明白了。基本上,如果达到限制,您会将输入的内容设置回之前的状态。

...
var inputEmail = $("input.toEmail").val();
var inputLength = inputEmail.length;

...

if (count >= 5) {
    $("input.toEmail").val(inputEmail.substring(0, inputLength - 1); // write back the previous content
}

您应该使用 keypress 而不是 keyup。

$("input.toEmail").keypress(function(e) {
  var inputEmail = $("input.toEmail").val();
  var count = (inputEmail.match(/,/g) || []).length;
  if (count >= 5) {
    e.preventDefault();
    e.stopPropagation();
  }
});

你可以通过这种简单的方式实现它。

注:

  • 使用split"Split a string into an array of substrings"
  • 使用slice"extracts parts of a string and returns the extracted parts in a new string"
  • 使用join"returns the array as a string"

$("input.toEmail").keyup(function(e){
        var inputEmail = $(this).val();
        var strArray = inputEmail.split(/,/g);
     
        if(strArray.length >= 5){
            this.value = strArray.slice(0, 5).join(',');
        }
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input  type="text" class="toEmail"/>

据我了解,您想限制为 6 个逗号限制值,因此它将包含 5 个逗号。我在这里做的是你可以替换最后(第 6 个)逗号 这样它就只允许 6 个值。

$(function() {
    $("input.toEmail").keyup(function(e){
       var length_comma = (($(this).val().match(/,/g)||[]).length)
        if(length_comma >= 6){          
          this.value = this.value.replace(/,\s*$/, "");
          e.preventDefault();
        }
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input class="toEmail" type="text" name="toEmail" />