【问题标题】:Need solution for complex jquery validation logic需要复杂jquery验证逻辑的解决方案
【发布时间】:2015-12-13 02:50:44
【问题描述】:

我在我的 rails 应用程序中使用 jquery 验证。我想将某些规则与某些触发器相关联。我在编写逻辑时遇到了麻烦。我会尽可能清楚地解释我想要什么。

规则:

  1. 最大长度为 25 个字符。
  2. 最少 3 个字符。
  3. 字符只能是字母数字或空格。

触发器:

  1. maxlength 应该只在 keyup 时触发。
  2. minlength 应该只在提交时触发。
  3. 无效字符应触发 onkeyup。

当少于 3 个字符时,我在如何让无效字符触发 keyup 的逻辑上遇到问题。我用于无效字符的正则表达式是/^[a-z\d ]+$/i

这是我的代码:

$('#custom-tag').validate({
    onkeyup: function (element, event) {
            if (event.which === 9 && this.elementValue(element) === "") {
                return;
            } else if (this.elementValue(element).replace(/\s+/g, ' ').trim().length < 3)  {
                return;
            } else {
                this.element(element);
            }
    },

    rules: {
      tag: {
        minLen: 3,
        maxLen: 25,
        format: true
      }
    }
  });
 });

更新:

我试图通过向同一个表单添加第二个验证来使其工作。代码在这里:

$('.custom-tag-onkeyup').validate({
    onkeyup: function (element, event) {
            if (event.which === 9 && this.elementValue(element) === "") {
                return;
            } else {
                this.element(element);
            }
    },
    rules: {
      tag: {
        maxLen: 25,
        alphanumeric: true
      }
    },
    tooltip_options: {
      tag: { placement: 'right', animation: false }
    }
  });

  $('.custom-tag-onblur').validate({
    onkeyup: false,
    onfocusout: function (element, event) {
                if (event.which === 9 && this.elementValue(element) === "") {
                  return;
                } else {
                  this.element(element);
                }
    },
    rules: {
      tag: {
        minlength: 3
      }
    },
    tooltip_options: {
      tag: { placement: 'right', animation: false }
    }
  });

我正在向我的表单添加两个类,因此我可以通过两种不同的方式对其进行验证,但它似乎不起作用。似乎一次只有一个验证有效。我做错了什么?

【问题讨论】:

  • 您可以在模糊时手动检查长度。最小长度检查不应该在 keyup 上
  • 你会怎么做?单独调用 .validate?
  • 我从未使用过 jQuery 验证器插件,但简单的答案是肯定的。想法是在用户输入时检查单个字符的有效性,一旦他说我完成输入,即在模糊时,检查完整的有效性和长度。也不要检查最大长度,而是使用文本框的 maxLength 属性。
  • 我的 javascript 不是很好,无法从头开始编写这一切。该插件使它变得容易,但我只是很难弄清楚如何满足上述所有规则/触发器。

标签: javascript jquery validation


【解决方案1】:

您可以尝试以下两种方法:

方法一

根据我的评论,您可以在 keyup 上测试值有效性和在 blur 上测试长度。这种方法的问题是您必须维护 2 个不同的错误标签。

方法2

您可以允许用户输入任何数据并在blur 上进行验证。这种方法的好处是,您将仅在用户完成输入后进行验证,并且将忽略任何拼写错误的情况。

以下 [JSFiddle] 中描述了这两种方法。(http://jsfiddle.net/RajeshDixit/ynby1an8/)

代码

function validateInput(el){
	var regex = /^[a-z\d ]+$/i;
  if(!regex.test(el.value)){
  	$("#err_valid").fadeIn()
  }
  else{
  	$("#err_valid").fadeOut()
  }
}

function validateLength(el){
	if(el.value.length <3){
  	$("#err_length").fadeIn()
  }
  else{
  	$("#err_length").fadeOut()
  }
}

$("#text2").on("blur", function(e){
	var regex = /^[a-z\d ]+$/i;
	if(!regex.test($(this).val())){
  	$("#err_both").text("Invalid Data").fadeIn();
  }
  else if($(this).val().length < 3){
  	$("#err_both").text("Enter at least 3 characters").fadeIn();
  }
  else{
  	$("#err_both").fadeOut();
  }
})
.error{
  display:none;
  color:red;
}
<input type="text" id="text" onkeyup="validateInput(this)" onblur="validateLength(this)" maxlength=25>
<p class="error" id="err_valid">Invalid entry</p>
<p class="error" id="err_length">Enter at least 3 characters.</p><br/>

<input type="text" id="text2">
<p class="error" id="err_both">Invalid entry</p>

希望这会有所帮助!

【讨论】:

  • 请看我的更新。我正在尝试使用您的第一种方法,因为我想要我在问题开始时描述的功能。
  • 看起来我想做的是not possible 使用这个插件。如果我想要这种类型的功能,我将不得不从头开始编写。感谢您的意见。
猜你喜欢
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
相关资源
最近更新 更多