jQuery Validate - 如何忽略内联模式验证

时间:2013-02-20 01:14:52

标签: jquery iphone ipad jquery-validate

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

  1. 客户端验证(使用jQuery Validate插件完成)
  2. 整齐的数字格式(这是使用jQuery autoNumeric插件完成的)
  3. iPad / iPhone键盘弹出数字字段(这是使用输入元素上的pattern =“[0-9] *”属性完成的 - 我不能使用HTML5 type =“number”,因为autoNumeric插件没有支持它。)。
  4. 问题是,虽然它有效,但验证插件会引发浮点值的错误(无效格式),因为小数点分隔符与pattern =“[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上强制使用数字小键盘,这并不意味着类型=“数字”或模式=“[0-9 *]”?

    修改

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

1 个答案:

答案 0 :(得分:0)

我通过覆盖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>