【问题标题】:jQuery Click Function, input value length and patternjQuery Click 函数,输入值长度和模式
【发布时间】:2017-05-09 06:52:17
【问题描述】:

我有一个问题,自 2 天以来我一直在苦苦挣扎。 我有一个要求输入电话号码的网页,我正在尝试在输入选项卡中为电话号码创建一个“验证器”,但似乎我无法弄清楚如何检查输入选项卡的最小长度,也如何只接受数字字符。代码如下:

    $("#start").click(function(){ // click func
    if ($.trim($('#phonenr').val()) == ''){
     $("#error").show();

我尝试添加:

     if ($.trim($('#phonenr').val()) == '') && ($.trim($('#phonenr').val().length) < 15)

但它只是行不通。 任何帮助,将不胜感激。另外请告诉我如何让它只允许数字?

谢谢!

最终代码,在@Saumya Rastogi 的帮助下。 $("#start").click(function(){

    var reg = /^\d+$/;
    var input_str = $('#phonenr').val();
   chopped_str = input_str.substring(0, input_str.length - 1);
   if(!reg.test(input_str)) {
    $("#error").show();
    return;
}
if(($.trim(input_str) == '') || ($.trim(input_str).length < 15)) {
  $("#error").show();
} else {

【问题讨论】:

  • 不起作用...
  • 请不要在您的问题中发布答案。将答案标记为答案是正确的做法。

标签: javascript jquery html javaquery


【解决方案1】:

您可以进行验证。

您可以使用test(正则表达式匹配测试)仅接受输入文本中的数字。只需使用 javascript 的 substring 将输入的非数字字符砍掉,如下所示:

$(function() {
	$('#btn').on('click',function(e) {
  	var reg = /^\d+$/; // <------ regex for validatin the input should only be digits
    var input_str = $('#phonenr').val();
    chopped_str = input_str.substring(0, input_str.length - 1);
    if(!reg.test(input_str)) {
    	$('label.error').show();
        return;
    }
    if(($.trim(input_str) == '') || ($.trim(input_str).length < 15)) {
      $('label.error').show();
    } else {
      $('label.error').hide();
    }
  });
})
label.error {
  display: none;
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="phonenr" type="text" value=""><br>
<label class='error'>Invalid Number</label>
<br><br>
<button id="btn">Click to Validate</button>

希望这会有所帮助!

【讨论】:

  • 我尝试从整个 sn-p 中修改我需要的行,但它不起作用......我得到了这个:if ($.trim($('#phonenr'). val()) == '') && || ($.trim($('#phonenr').length
  • 根据您的情况,&amp;&amp;操作员只会在输入框为空且输入框少于15个字符时才会显示错误信息,因此不会显示错误!你应该告诉我你想要什么类型的验证?
  • 让我向你展示我在说什么.. $("#start").click(function(){// click function if ($.trim($('# phonenr').val()) == '') [AND / OR] PHNR_FROM_INPUT 包含除数字以外的其他内容 { $("#error").show(); }
  • @unkn0wnx - 我已经更新了代码,我已经添加了验证按钮,如果你想要其他任何东西,请告诉我!
  • 太棒了,我修改了它,它正在工作,最小长度是 15!还有一件事,如何为 NUMBERS_ONLY 添加验证?非常感谢,修改方法如下: $("#start").click(function(){ var reg = /^\d+$/; var input_str = $('#phonenr').val();chopped_str = input_str.substring(0, input_str.length - 1); if(!reg.test(input_str)) { $(this).val(chopped_str); } if(($.trim(input_str) == '') || ($.trim(input_str).length
【解决方案2】:

如果您使用的是 HTML5,那么您可以使用新的number 输入类型可用

<input type="number" name="phone" min="10" max="10">

您还可以使用pattern 属性将输入限制为特定的正则表达式。

【讨论】:

  • 非常感谢您的回复。我尝试使用 HTML5,但该操作取决于 Java 和存储在 javascript 文件中的消息,以便显示电话号码无效的错误。
【解决方案3】:

如果您正在寻找根据模式检查输入并根据有效性显示消息的最简单方法,那么使用正则表达式就是您想要的:

// Wait until the DOM has been fully parsed
window.addEventListener("DOMContentLoaded", function(){

  // Get DOM references:
  var theForm = document.querySelector("#frmTest");
  var thePhone = document.querySelector("#txtPhone");
  var btnSubmit = document.querySelector("#btnSubmit");
  
  // Hook into desired events. Here, we'll validate as text is inputted
  // into the text field, when the submit button is clicked and when the 
  // form is submitted
  theForm.addEventListener("submit", validate);
  btnSubmit.addEventListener("click", validate);
  thePhone.addEventListener("input", validate);
  
  // The simple validation function
  function validate(evt){
    var errorMessage = "Not a valid phone number!";
    
    // Just check the input against a regular expression
    // This one expects 10 digits in a row.
    // If the pattern is matched the form is allowed to submit,
    // if not, the error message appears and the form doesn't submit.
    !thePhone.value.match(/\d{3}\d{3}\d{4}/) ? 
      thePhone.nextElementSibling.textContent = errorMessage :	thePhone.nextElementSibling.textContent = ""; 
      evt.preventDefault();
  }
 
});
span {
  background: #ff0;
}
<form id="frmTest" action="#" method="post">
  <input id="txtPhone" name="txtPhone"><span></span>
  <br>
  <input type="submit" id="btnSubmit">
</form>

或者,您可以更好地控制流程并使用带有正则表达式的 pattern HTML5 属性来验证条目。同时检查长度和位数。

然后您可以通过 HTML5 Validation API 使用 setCustomValidity() 方法实现您自己的自定义错误消息。

<form id="frmTest" action="#" method="post">
  <input type="tel" id="txtPhone" name="txtPhone" maxlength="20"
         placeholder="555-555-5555" title="555-555-5555"
         pattern="\d{3}-\d{3}-\d{4}" required>
  <input type="submit" id="btnSubmit">
</form> 

Stack Overflow 的代码 sn-p 环境不能很好地处理表单,但可以看到一个正常工作的 Fiddle here

【讨论】:

  • 它仍然不起作用,因为对元素的点击是由javascript而不是html5操作的。
  • 不确定你在这里想说什么。它确实有效。 HTML5 不仅仅是标签和属性。它实际上是新元素、属性和 JavaScript API。是的,当然处理事件是用 JavaScript 完成的。但是,根据pattern 属性中指定的正则表达式实际检查电话号码是由浏览器本机完成的,只不过是一个普通属性。 JavaScript 仅用于(在这种情况下)显示您所说的自定义错误消息。
  • 我已经添加了你给我的确切模式,然后我在输入选项卡中只输入了1个数字(1个字符),它没有工作......
  • @unkn0wnx 你试过我链接的小提琴吗?这正是你所说的你想要的。你在什么浏览器上测试?
  • Marcus,我无法编辑我的 javascript 代码,而不是我在此线程上发布的内容。我必须使用相同的代码,否则 javascript 文件将无法加载。
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多