ソースを参照

#164: Add new getErrors() method

nghuuphuoc 11 年 前
コミット
da96f27efd

+ 186 - 0
demo/container4.html

@@ -0,0 +1,186 @@
+<!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">
+            <!-- form: -->
+            <section>
+                <div class="col-lg-8 col-lg-offset-2">
+                    <div class="page-header">
+                        <h2>Customizing errors</h2>
+                    </div>
+
+                    <form id="defaultForm" method="post" class="form-horizontal" action="target.php">
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Full name</label>
+                            <div class="col-lg-4">
+                                <input type="text" class="form-control" name="firstName" placeholder="First name" />
+                            </div>
+                            <div class="col-lg-4">
+                                <input type="text" class="form-control" name="lastName" placeholder="Last name" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Username</label>
+                            <div class="col-lg-5">
+                                <input type="text" class="form-control" name="username" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Email address</label>
+                            <div class="col-lg-5">
+                                <input type="text" class="form-control" name="email" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Password</label>
+                            <div class="col-lg-5">
+                                <input type="password" class="form-control" name="password" />
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <label class="col-lg-3 control-label">Gender</label>
+                            <div class="col-lg-5">
+                                <div class="radio">
+                                    <label>
+                                        <input type="radio" name="gender" value="male" /> Male
+                                    </label>
+                                </div>
+                                <div class="radio">
+                                    <label>
+                                        <input type="radio" name="gender" value="female" /> Female
+                                    </label>
+                                </div>
+                                <div class="radio">
+                                    <label>
+                                        <input type="radio" name="gender" value="other" /> Other
+                                    </label>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="form-group hide">
+                            <div class="col-lg-9 col-lg-offset-3">
+                                <ul id="errors"></ul>
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <div class="col-lg-9 col-lg-offset-3">
+                                <button type="submit" class="btn btn-primary">Sign up</button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </section>
+            <!-- :form -->
+        </div>
+    </div>
+
+<script type="text/javascript">
+$(document).ready(function() {
+    $('#defaultForm')
+        .bootstrapValidator({
+            message: 'This value is not valid',
+            feedbackIcons: {
+                valid: 'glyphicon glyphicon-ok',
+                invalid: 'glyphicon glyphicon-remove',
+                validating: 'glyphicon glyphicon-refresh'
+            },
+            fields: {
+                firstName: {
+                    validators: {
+                        notEmpty: {
+                            message: 'The first name is required and cannot be empty'
+                        }
+                    }
+                },
+                lastName: {
+                    validators: {
+                        notEmpty: {
+                            message: 'The last name is required and cannot be empty'
+                        }
+                    }
+                },
+                username: {
+                    message: 'The username is not valid',
+                    validators: {
+                        notEmpty: {
+                            message: 'The username is required and cannot be empty'
+                        },
+                        stringLength: {
+                            min: 6,
+                            max: 30,
+                            message: 'The username must be more than 6 and less than 30 characters long'
+                        },
+                        regexp: {
+                            regexp: /^[a-zA-Z0-9_\.]+$/,
+                            message: 'The username can only consist of alphabetical, number, dot and underscore'
+                        },
+                        different: {
+                            field: 'password',
+                            message: 'The username and password cannot be the same as each other'
+                        }
+                    }
+                },
+                email: {
+                    validators: {
+                        emailAddress: {
+                            message: 'The input is not a valid email address'
+                        }
+                    }
+                },
+                password: {
+                    validators: {
+                        notEmpty: {
+                            message: 'The password is required and cannot be empty'
+                        },
+                        different: {
+                            field: 'username',
+                            message: 'The password cannot be the same as username'
+                        }
+                    }
+                },
+                gender: {
+                    validators: {
+                        notEmpty: {
+                            message: 'The gender is required'
+                        }
+                    }
+                }
+            }
+        })
+        .on('error.field.bv', function(e, field, $field) {
+            var $form    = $(e.target),
+                messages = $form.data('bootstrapValidator').getErrors($field);
+            $('#errors').find('li[data-bv-for="' + field + '"]').remove();
+            for (var i in messages) {
+                $('<li/>').attr('data-bv-for', field).html(messages[i]).appendTo('#errors');
+            }
+            $('#errors').parents('.form-group').removeClass('hide');
+        })
+        .on('success.field.bv', function(e, field) {
+            $('#errors').find('li[data-bv-for="' + field + '"]').remove();
+        })
+        .on('success.form.bv', function(e) {
+            $('#errors')
+                .html('')
+                .parents('.form-group').addClass('hide');
+        });
+});
+</script>
+</body>
+</html>

+ 44 - 0
dist/js/bootstrapValidator.js

@@ -965,6 +965,50 @@
         },
 
         /**
+         * Get the error messages
+         *
+         * @param {jQuery|String} [field] The field, which can be
+         * - a string: The field name
+         * - a jQuery object representing the field element
+         * If the field is not defined, the method returns all error messages of all fields
+         * @returns {String[]}
+         */
+        getErrors: function(field) {
+            var that     = this,
+                messages = [],
+                $fields  = $([]);
+
+            switch (true) {
+                case (field && 'object' == typeof field):
+                    $fields = field;
+                    break;
+                case (field && 'string' == typeof field):
+                    var f = this.getFieldElements(field);
+                    if (f.length > 0) {
+                        var type = f.attr('type');
+                        $fields = ('radio' == type || 'checkbox' == type) ? $(f[0]) : f;
+                    }
+                    break;
+                default:
+                    $fields = this.$invalidFields;
+                    break;
+            }
+
+            $fields.each(function() {
+                messages = messages.concat(
+                    $(this)
+                        .data('bv.messages')
+                        .find('.help-block[data-bv-for="' + $(this).attr('data-bv-field') + '"][data-bv-result="' + that.STATUS_INVALID + '"]')
+                        .map(function() {
+                            return $(this).html()
+                        })
+                        .get()
+                );
+            });
+            return messages;
+        },
+
+        /**
          * Add new field element
          *
          * @param {jQuery} $field The field element

ファイルの差分が大きいため隠しています
+ 2 - 2
dist/js/bootstrapValidator.min.js


+ 44 - 0
src/js/bootstrapValidator.js

@@ -964,6 +964,50 @@
         },
 
         /**
+         * Get the error messages
+         *
+         * @param {jQuery|String} [field] The field, which can be
+         * - a string: The field name
+         * - a jQuery object representing the field element
+         * If the field is not defined, the method returns all error messages of all fields
+         * @returns {String[]}
+         */
+        getErrors: function(field) {
+            var that     = this,
+                messages = [],
+                $fields  = $([]);
+
+            switch (true) {
+                case (field && 'object' == typeof field):
+                    $fields = field;
+                    break;
+                case (field && 'string' == typeof field):
+                    var f = this.getFieldElements(field);
+                    if (f.length > 0) {
+                        var type = f.attr('type');
+                        $fields = ('radio' == type || 'checkbox' == type) ? $(f[0]) : f;
+                    }
+                    break;
+                default:
+                    $fields = this.$invalidFields;
+                    break;
+            }
+
+            $fields.each(function() {
+                messages = messages.concat(
+                    $(this)
+                        .data('bv.messages')
+                        .find('.help-block[data-bv-for="' + $(this).attr('data-bv-field') + '"][data-bv-result="' + that.STATUS_INVALID + '"]')
+                        .map(function() {
+                            return $(this).html()
+                        })
+                        .get()
+                );
+            });
+            return messages;
+        },
+
+        /**
          * Add new field element
          *
          * @param {jQuery} $field The field element