浏览代码

#56: Support input defined by a CSS selector

nghuuphuoc 11 年之前
父节点
当前提交
44cddcabdd
共有 4 个文件被更改,包括 146 次插入5 次删除
  1. 137 0
      demo/selector.html
  2. 4 2
      dist/js/bootstrapValidator.js
  3. 1 1
      dist/js/bootstrapValidator.min.js
  4. 4 2
      src/js/bootstrapValidator.js

+ 137 - 0
demo/selector.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>BootstrapValidator demo</title>
+
+    <link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css"/>
+    <link rel="stylesheet" href="../dist/css/bootstrapValidator.css"/>
+
+    <script type="text/javascript" src="../vendor/jquery/jquery-1.10.2.min.js"></script>
+    <script type="text/javascript" src="../vendor/bootstrap/js/bootstrap.min.js"></script>
+    <script type="text/javascript" src="../dist/js/bootstrapValidator.js"></script>
+</head>
+<body>
+    <div class="container">
+        <div class="row">
+            <section>
+                <div class="col-lg-8 col-lg-offset-2">
+                    <div class="page-header">
+                        <h2>Credit card information</h2>
+                    </div>
+
+                    <form id="paymentForm" method="post" class="form-horizontal" action="target.php">
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Credit card number</label>
+                            <div class="col-lg-5">
+                                <input type="text" class="form-control" id="ccNumber" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Expiration</label>
+                            <div class="col-lg-4">
+                                <input type="text" class="form-control" placeholder="Month" data-stripe="exp-month" />
+                            </div>
+                            <div class="col-lg-4">
+                                <input type="text" class="form-control" placeholder="Year" data-stripe="exp-year" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">CVV</label>
+                            <div class="col-lg-2">
+                                <input type="text" class="form-control cvvNumber" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <div class="col-lg-9 col-lg-offset-3">
+                                <button type="submit" class="btn btn-primary">Pay</button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </section>
+        </div>
+    </div>
+
+<script type="text/javascript">
+$(document).ready(function() {
+    $('#paymentForm').bootstrapValidator({
+        feedbackIcons: {
+            valid: 'glyphicon glyphicon-ok',
+            invalid: 'glyphicon glyphicon-remove',
+            validating: 'glyphicon glyphicon-refresh'
+        },
+        fields: {
+            ccNumber: {
+                selector: '#ccNumber',
+                validators: {
+                    notEmpty: {
+                        message: 'The credit card number is required'
+                    },
+                    creditCard: {
+                        message: 'The credit card number is not valid'
+                    }
+                }
+            },
+            expMonth: {
+                selector: '[data-stripe="exp-month"]',
+                validators: {
+                    notEmpty: {
+                        message: 'The expiration month is required'
+                    },
+                    digits: {
+                        message: 'The expiration month can contain digits only'
+                    },
+                    callback: {
+                        message: 'Expired',
+                        callback: function(value, validator) {
+                            value = parseInt(value, 10);
+                            var currentMonth = new Date().getMonth() + 1;
+                            return (value <= 12 && value >= currentMonth);
+                        }
+                    }
+                }
+            },
+            expYear: {
+                selector: '[data-stripe="exp-year"]',
+                validators: {
+                    notEmpty: {
+                        message: 'The expiration year is required'
+                    },
+                    digits: {
+                        message: 'The expiration year can contain digits only'
+                    },
+                    callback: {
+                        message: 'Expired',
+                        callback: function(value, validator) {
+                            value = parseInt(value, 10);
+                            var currentYear = new Date().getFullYear();
+                            return (value >= currentYear && value <= currentYear + 100);
+                        }
+                    }
+                }
+            },
+            cvvNumber: {
+                selector: '.cvvNumber',
+                validators: {
+                    notEmpty: {
+                        message: 'The CVV number is required'
+                    },
+                    digits: {
+                        message: 'The CVV number can contain digits only'
+                    },
+                    stringLength: {
+                        min: 3,
+                        max: 4,
+                        message: 'Invalid CVV number'
+                    }
+                }
+            }
+        }
+    });
+});
+</script>
+</body>
+</html>

+ 4 - 2
dist/js/bootstrapValidator.js

@@ -139,6 +139,8 @@
                 return;
             }
 
+            fields.attr('data-bv-field', field);
+
             // Create help block elements for showing the error messages
             var $field   = $(fields[0]),
                 $parent  = $field.parents('.form-group'),
@@ -289,7 +291,7 @@
          * @returns {null|jQuery[]}
          */
         getFieldElements: function(field) {
-            var fields = this.$form.find('[name="' + field + '"]');
+            var fields = this.$form.find(this.options.fields[field].selector || '[name="' + field + '"]');
             return (fields.length == 0) ? null : fields;
         },
 
@@ -407,7 +409,7 @@
         updateStatus: function(field, status, validatorName) {
             var $field   = ('string' == typeof field) ? this.getFieldElements(field) : field,
                 that     = this,
-                field    = $field.attr('name'),
+                field    = $field.attr('data-bv-field'),
                 $parent  = $field.parents('.form-group'),
                 $message = $field.data('bootstrapValidator.messageContainer'),
                 $errors  = $message.find('.help-block[data-bv-validator]'),

文件差异内容过多而无法显示
+ 1 - 1
dist/js/bootstrapValidator.min.js


+ 4 - 2
src/js/bootstrapValidator.js

@@ -138,6 +138,8 @@
                 return;
             }
 
+            fields.attr('data-bv-field', field);
+
             // Create help block elements for showing the error messages
             var $field   = $(fields[0]),
                 $parent  = $field.parents('.form-group'),
@@ -288,7 +290,7 @@
          * @returns {null|jQuery[]}
          */
         getFieldElements: function(field) {
-            var fields = this.$form.find('[name="' + field + '"]');
+            var fields = this.$form.find(this.options.fields[field].selector || '[name="' + field + '"]');
             return (fields.length == 0) ? null : fields;
         },
 
@@ -406,7 +408,7 @@
         updateStatus: function(field, status, validatorName) {
             var $field   = ('string' == typeof field) ? this.getFieldElements(field) : field,
                 that     = this,
-                field    = $field.attr('name'),
+                field    = $field.attr('data-bv-field'),
                 $parent  = $field.parents('.form-group'),
                 $message = $field.data('bootstrapValidator.messageContainer'),
                 $errors  = $message.find('.help-block[data-bv-validator]'),