【问题标题】:jQuery Validate - how to ignore inline pattern validationjQuery Validate - 如何忽略内联模式验证
【发布时间】:2013-02-20 18:21:51
【问题描述】:

我有设置,需要实现三个不同的目标:

  1. 客户端验证(使用 jQuery Validate 插件完成)
  2. 简洁的数字格式(使用 jQuery autoNumeric 插件完成)
  3. iPad/iPhone 键盘在纯数字字段上弹出(这是使用输入元素上的 pattern="[0-9]*" 属性完成的 - 我不能使用 HTML5 type="number",因为 autoNumeric 插件没有支持)。

问题是,当它工作时,验证插件会引发浮点值错误(无效格式),因为小数点分隔符与模式不匹配 =“[0-9]* “正则表达式。请在下面找到一个示例输入字段:

<input type="text" id="acme" name="acme" size="4" 
 data-autonumeric="{vMin: '0.00'}" class="required number autoNumeric" 
 min="0.0" step="0.01" pattern="[0-9*]">

有没有办法以某种方式禁用模式验证,最好全局禁用所有已验证字段或每个字段?或者也许还有另一种方法可以在 iPad/iPhone 上强制使用数字键盘,这并不意味着 type="number" 或 pattern="[0-9*]"?

编辑:

我找到了解决此问题的方法,请参阅下面的答案。如果有人有更好的想法,请分享。谢谢。

【问题讨论】:

  • 请出示您的代码...

标签: jquery iphone ipad jquery-validate


【解决方案1】:

我通过覆盖 jQuery Validate 中的模式验证方法找到了一种方法。如果有人知道更好的解决方案,请发表评论。

这里是代码。它与添加的 jQuery.validator.addMethod("pattern"... 一起工作(忽略 \d* - 要在 iOS 中显示数字键盘,可以将模式属性的值设置为 "[0-9] " 或 "\d",我使用它(来源 http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html)。注释掉该行以查看实际问题。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/additional-methods.min.js"></script>
<script type="text/javascript" src="jquery.metadata.js"></script>
<script type="text/javascript" src="autoNumeric-1.7.4.js"></script>
<form id="test">
<input type="text" id="acme" name="acme" size="4" data-autonumeric="{vMin: '0.00'}"
    class="required number autoNumeric" min="0.0" step="0.01" pattern="\d*" value="1.00">
</form>
<script type="text/javascript">
    $(document).ready(function () {
        $("#test").validate();
    });

    // This overrides the additional-methods.min.js implementation to ignore pattern="\d*" validation
    jQuery.validator.addMethod("pattern", function (e, t, n) {
        return this.optional(t) || n == "\\d*" ? !0 : (typeof n == "string" && (n = new RegExp("^(?:" + n + ")$")), n.test(e))
    }, "Invalid format.");
</script>

【讨论】:

  • 我认为这是最好的解决方案:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多