浏览代码

fixed validation for checkboxes

Kristian Puccio 12 年之前
父节点
当前提交
e433ab6b23
共有 4 个文件被更改,包括 84 次插入19 次删除
  1. 42 9
      dist/js/bootstrapValidator.js
  2. 1 1
      dist/js/bootstrapValidator.min.js
  3. 33 8
      src/js/bootstrapValidator.js
  4. 8 1
      src/js/validator/notEmpty.js

+ 42 - 9
dist/js/bootstrapValidator.js

@@ -130,14 +130,26 @@
 
                 for (var field in this.options.fields) {
                     (function(field) {
-                        var $field = that.getFieldElement(field);
-                        if ($field) {
-                            var type  = $field.attr('type'),
-                                event = ('checkbox' == type || 'radio' == type || 'SELECT' == $field.get(0).tagName) ? 'change' : 'keyup';
-                            $field.on(event, function() {
-                                that.formSubmited = false;
-                                that.validateField(field);
-                            });
+                        var fields = that.getFieldElements(field);
+
+                        if (fields && fields.length > 0) {
+                            var $field = $(fields[0]);
+                            var type  = $field.attr('type');
+
+                            if ('radio' == type) {
+                                var event = 'change';
+                                fields.on(event, function() {
+                                    that.formSubmited = false;
+                                    that.validateField(field);
+                                });
+                            } else {
+                                var event = ('checkbox' == type || 'SELECT' == $field.get(0).tagName) ? 'change' : 'keyup';
+                                $field.on(event, function() {
+                                    that.formSubmited = false;
+                                    that.validateField(field);
+                                });
+                            }
+
                         }
                     })(field);
                 }
@@ -213,6 +225,19 @@
         },
 
         /**
+         * Get field elements
+         * Used for radios
+         *
+         * @param {String} field The field name
+         * @returns {jQuery}
+         */
+        getFieldElements: function(field) {
+            var fields = this.$form.find('[name="' + field + '"]');
+            return (fields.length == 0) ? null : fields;
+        },
+
+
+        /**
          * Validate given field
          *
          * @param {String} field The field name
@@ -345,6 +370,7 @@
                 return false;
             }
             for (var field in this.invalidFields) {
+                // Don't validate disabled element
                 if (this.invalidFields[field] && !this.getFieldElement(field).is(':disabled')) {
                     return false;
                 }
@@ -639,8 +665,15 @@
          * @returns {Boolean}
          */
         validate: function(validator, $field, options) {
+
+
             var type = $field.attr('type');
-            return ('checkbox' == type || 'radio' == type) ? $field.is(':checked') : ($.trim($field.val()) != '');
+            if('radio' == type) {
+                var radioSelector = "input[name=" + $field.attr('name') + "]:checked";
+                return ($(radioSelector).length > 0);
+            }
+
+            return ('checkbox' == type) ? $field.is(':checked') : ($.trim($field.val()) != '');
         }
     };
 }(window.jQuery));

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


+ 33 - 8
src/js/bootstrapValidator.js

@@ -130,14 +130,26 @@
 
                 for (var field in this.options.fields) {
                     (function(field) {
-                        var $field = that.getFieldElement(field);
-                        if ($field) {
-                            var type  = $field.attr('type'),
-                                event = ('checkbox' == type || 'radio' == type || 'SELECT' == $field.get(0).tagName) ? 'change' : 'keyup';
-                            $field.on(event, function() {
-                                that.formSubmited = false;
-                                that.validateField(field);
-                            });
+                        var fields = that.getFieldElements(field);
+
+                        if (fields && fields.length > 0) {
+                            var $field = $(fields[0]);
+                            var type  = $field.attr('type');
+
+                            if ('radio' == type) {
+                                var event = 'change';
+                                fields.on(event, function() {
+                                    that.formSubmited = false;
+                                    that.validateField(field);
+                                });
+                            } else {
+                                var event = ('checkbox' == type || 'SELECT' == $field.get(0).tagName) ? 'change' : 'keyup';
+                                $field.on(event, function() {
+                                    that.formSubmited = false;
+                                    that.validateField(field);
+                                });
+                            }
+
                         }
                     })(field);
                 }
@@ -213,6 +225,19 @@
         },
 
         /**
+         * Get field elements
+         * Used for radios
+         *
+         * @param {String} field The field name
+         * @returns {jQuery}
+         */
+        getFieldElements: function(field) {
+            var fields = this.$form.find('[name="' + field + '"]');
+            return (fields.length == 0) ? null : fields;
+        },
+
+
+        /**
          * Validate given field
          *
          * @param {String} field The field name

+ 8 - 1
src/js/validator/notEmpty.js

@@ -9,8 +9,15 @@
          * @returns {Boolean}
          */
         validate: function(validator, $field, options) {
+
+
             var type = $field.attr('type');
-            return ('checkbox' == type || 'radio' == type) ? $field.is(':checked') : ($.trim($field.val()) != '');
+            if('radio' == type) {
+                var radioSelector = "input[name=" + $field.attr('name') + "]:checked";
+                return ($(radioSelector).length > 0);
+            }
+
+            return ('checkbox' == type) ? $field.is(':checked') : ($.trim($field.val()) != '');
         }
     };
 }(window.jQuery));