【问题标题】:Text inputs with maxlength not validating with jQuery Validate带有 maxlength 的文本输入未使用 jQuery Validate 进行验证
【发布时间】:2010-07-29 17:18:48
【问题描述】:

我在使用 jQuery Validate 时遇到了问题。问题是我有几个带有maxlength 属性集的文本框。尽管它们不是必需的,但它们仍然无法在为空或空格时验证。

示例 HTML:

<input type="textbox" id="tbx1" maxlength="100" value="" />

然后,$('#tbx1').valid() 返回false。它不应该返回true 吗?是否有任何已知的解决方法?

哦,添加$('#myform').validate({ ignore: '#tbx1' }); 对我来说不太适用,因为我正在使用带有自动 ID 的 ASP.NET 控件。我知道我可以使用控件的客户端 ID 或类似 Wilco 的 IDOverride 的东西,但这不是我喜欢的。

那么,有人吗?谢谢!

【问题讨论】:

  • 文本框是必填字段吗?我认为验证插件会修剪空格,因此如果该框为空白或只是空格并需要它不会验证。
  • @JKirchartz 这就是重点。该字段不是必需的。我不知道这是错误还是设计使然,但我想找到解决方法
  • 这一定是一个错误。我正在遭受同样的事情。您有一个不需要的字段,但只需给它一个 maxlength 并且 jquery validate 插件突然认为它验证失败。 100% 错误。另一个明显的迹象是它甚至不会引发该字段的错误。所以肯定有什么东西在那里被破坏了。令人沮丧,因为我需要对我的字段设置最大长度限制!
  • 是的,这肯定是一个错误。所以,由于我的应用程序只能在三个月内准备好,在此之前我将取消 maxlength 并希望在下一次更新中得到修复。
  • 我只是想确认使用 jQuery 1.5 和 jQuery Validate 1.7,我遇到了同样的问题。当我没有将它们设置为必需时,具有 MaxLength 的 ASP.NET 元素无法验证。

标签: jquery jquery-validate


【解决方案1】:

这似乎是这个插件的一个错误。 如果通过使用以下代码将方法替换为自定义实现来修复它:

$.validator.addMethod("maxlength", function (value, element, len) {
   return value == "" || value.length <= len;
});

【讨论】:

  • 这对我来说比为我的新方法设置一个新名称更有效。我已经在输入字段上设置了 maxlength 属性,我没有尝试对其进行验证。一方面,我觉得不需要验证它——浏览器确保你不能添加超过指定数量的字符,所以我真的看不出验证是如何失败的?但是,只要验证有效,验证就没有坏处。 :)
  • 谢谢!!那个虫子花了我几个小时!两年后这仍然是一个问题,这超出了我的理解
  • 这很有用,因为浏览器的“maxlength”检查并不总是考虑换行符。如here所述。
  • 验证查找输入字段的名称检查this解决方案。希望有所帮助。
【解决方案2】:

我自己在写一些复杂的表格时遇到了这个问题......

我的解决方案是创建我自己的 maxlength 方法,我可以使用“maxLen”,它的工作方式几乎与默认方法完全相同,只是名称不同。只需将其粘贴到您的主要验证调用($("#mainform").validate({}); 或任何您的表单调用)之上。

//Custom Max Length Validation
jQuery.validator.addMethod("maxLen", function (value, element, param) {
    //console.log('element= ' + $(element).attr('name') + ' param= ' + param )
    if ($(element).val().length > param) {
        return false;
    } else {
        return true;
    }
}, "You have reached the maximum number of characters allowed for this field.");

完成后,您可以像这样添加规则:

 rules: {
       Message: {
            required: false,
            maxLen: 200
        }
 }

【讨论】:

    【解决方案3】:

    首先,我假设输入具有“名称”属性并且在您的示例中根本没有显示?如果没有,请尝试一下,它可能会解决问题。

    其次,您是否尝试过将字段显式设置为不需要但在验证器对象中具有最大长度?例如:

    var rules = {
      'txtbx1': {
        required: false,
        maxlength: '100'
      }
    };
    
    $('#formId').validate({rules:rules});
    

    【讨论】:

    • 感谢您的回答,菲利普,但这并不能解决问题。我实际上已经忘记了这个问题,因为它已被一致宣布为错误。我的输入没有名称属性,因为在该上下文中不需要它。另外,正如我在问题中所说,我正在寻找一种不需要$('#formId').validate(...); 的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多