Browse Source

#125: Improvement removeFieldElement(); Add new dynamic field example

nghuuphuoc 11 years ago
parent
commit
859f867945
4 changed files with 192 additions and 22 deletions
  1. 182 0
      demo/dynamic4.html
  2. 4 10
      dist/js/bootstrapValidator.js
  3. 2 2
      dist/js/bootstrapValidator.min.js
  4. 4 10
      src/js/bootstrapValidator.js

+ 182 - 0
demo/dynamic4.html

@@ -0,0 +1,182 @@
+<!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">
+        <div class="col-lg-8 col-lg-offset-2">
+            <div class="page-header">
+                <h2>Dynamic fields</h2>
+            </div>
+
+            <form id="interviewForm" method="post" class="form-horizontal" action="target.php">
+                <div class="form-group">
+                    <label class="col-lg-3 control-label">Your name</label>
+                    <div class="col-lg-5">
+                        <input class="form-control" type="text" name="name" />
+                    </div>
+                </div>
+
+                <div class="form-group">
+                    <label class="col-lg-3 control-label">Topic</label>
+                    <div class="col-lg-5">
+                        <div class="checkbox">
+                            <label>
+                                <input type="checkbox" name="topic[]" value="css" /> CSS
+                            </label>
+                        </div>
+                        <div class="checkbox">
+                            <label>
+                                <input type="checkbox" name="topic[]" value="javascript" /> Javascript
+                            </label>
+                        </div>
+                    </div>
+                </div>
+
+                <div style="display: none;" data-topic="css">
+                    <fieldset>
+                        <legend>CSS</legend>
+                        <p>Choose the frameworks that support responsive:</p>
+
+                        <div class="form-group">
+                            <div class="col-lg-offset-3 col-lg-5">
+                                <div class="checkbox">
+                                    <label>
+                                        <input type="checkbox" name="css_frameworks[]" value="Bootstrap" /> Bootstrap
+                                    </label>
+                                </div>
+                                <div class="checkbox">
+                                    <label>
+                                        <input type="checkbox" name="css_frameworks[]" value="Foundation" /> Foundation
+                                    </label>
+                                </div>
+                                <div class="checkbox">
+                                    <label>
+                                        <input type="checkbox" name="css_frameworks[]" value="Blueprint" /> Blueprint
+                                    </label>
+                                </div>
+                                <div class="checkbox">
+                                    <label>
+                                        <input type="checkbox" name="css_frameworks[]" value="960gs" /> 960 Grid System
+                                    </label>
+                                </div>
+                                <div class="checkbox">
+                                    <label>
+                                        <input type="checkbox" name="css_frameworks[]" value="Pure" /> Pure
+                                    </label>
+                                </div>
+                                <div class="checkbox">
+                                    <label>
+                                        <input type="checkbox" name="css_frameworks[]" value="YAML" /> YAML
+                                    </label>
+                                </div>
+                            </div>
+                        </div>
+                    </fieldset>
+                </div>
+
+                <div style="display: none;" data-topic="javascript">
+                    <fieldset>
+                        <legend>Javascript</legend>
+                        <p>Name 4 Javascript frameworks you have heard about</p>
+
+                        <div class="form-group">
+                            <div class="col-lg-offset-3 col-lg-5">
+                                <input class="form-control" type="text" name="js_frameworks[]" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <div class="col-lg-offset-3 col-lg-5">
+                                <input class="form-control" type="text" name="js_frameworks[]" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <div class="col-lg-offset-3 col-lg-5">
+                                <input class="form-control" type="text" name="js_frameworks[]" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <div class="col-lg-offset-3 col-lg-5">
+                                <input class="form-control" type="text" name="js_frameworks[]" />
+                            </div>
+                        </div>
+                    </fieldset>
+                </div>
+
+                <div class="form-group">
+                    <div class="col-lg-offset-3 col-lg-3">
+                        <button type="submit" class="btn btn-primary">Submit</button>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+</div>
+
+<script type="text/javascript">
+    $(document).ready(function() {
+        $('#interviewForm')
+            .bootstrapValidator({
+                message: 'This value is not valid',
+                feedbackIcons: {
+                    valid: 'glyphicon glyphicon-ok',
+                    invalid: 'glyphicon glyphicon-remove',
+                    validating: 'glyphicon glyphicon-refresh'
+                },
+                fields: {
+                    name: {
+                        validators: {
+                            notEmpty: {
+                                message: 'The name is required'
+                            }
+                        }
+                    }
+                }
+            })
+            .find('input[type="checkbox"][name="topic[]"]')
+                .on('change', function() {
+                    var topic      = $(this).val(),
+                        $container = $('[data-topic="' + topic + '"]');
+                    $container.toggle();
+
+                    var display = $container.css('display');
+                    switch (true) {
+                        case ('css' == topic && 'block' == display):
+                            $('#interviewForm').bootstrapValidator('addField', 'css_frameworks[]', {
+                                validators: {
+                                    notEmpty: {
+                                        message: 'Please choose at least 1 framework'
+                                    }
+                                }
+                            });
+                            break;
+                        case ('css' == topic && 'none' == display):
+                            $('#interviewForm').bootstrapValidator('removeField', 'css_frameworks[]');
+                            break;
+                        case ('javascript' == topic && 'block' == display):
+                            $('#interviewForm').bootstrapValidator('addField', 'js_frameworks[]', {
+                                validators: {
+                                    notEmpty: {
+                                        message: 'The name of framework is required'
+                                    }
+                                }
+                            });
+                            break;
+                        case ('javascript' == topic && 'none' == display):
+                            $('#interviewForm').bootstrapValidator('removeField', 'js_frameworks[]');
+                            break;
+                    }
+                });
+    });
+</script>
+</body>
+</html>

+ 4 - 10
dist/js/bootstrapValidator.js

@@ -1088,21 +1088,15 @@
 
             $field.attr('data-bv-field', field);
 
-            // Update the cache
-            var index = this._cacheFields[field].index($field);
-            (index == -1) ? (delete this._cacheFields[field]) : this._cacheFields[field].splice(index, 1);
-
             // Remove from the list of invalid fields
-            index = this.$invalidFields.index($field);
+            var index = this.$invalidFields.index($field);
             if (index != -1) {
                 this.$invalidFields.splice(index, 1);
             }
 
-            if (this._cacheFields[field].length == 0) {
-                // There is no field with the same name
-                //delete this.options.fields[field];
-                //delete this._cacheFields[field];
-            } else if ('checkbox' == type || 'radio' == type) {
+            // Update the cache
+            delete this._cacheFields[field];
+            if ('checkbox' == type || 'radio' == type) {
                 this._initField(field);
             }
 

File diff suppressed because it is too large
+ 2 - 2
dist/js/bootstrapValidator.min.js


+ 4 - 10
src/js/bootstrapValidator.js

@@ -1087,21 +1087,15 @@
 
             $field.attr('data-bv-field', field);
 
-            // Update the cache
-            var index = this._cacheFields[field].index($field);
-            (index == -1) ? (delete this._cacheFields[field]) : this._cacheFields[field].splice(index, 1);
-
             // Remove from the list of invalid fields
-            index = this.$invalidFields.index($field);
+            var index = this.$invalidFields.index($field);
             if (index != -1) {
                 this.$invalidFields.splice(index, 1);
             }
 
-            if (this._cacheFields[field].length == 0) {
-                // There is no field with the same name
-                //delete this.options.fields[field];
-                //delete this._cacheFields[field];
-            } else if ('checkbox' == type || 'radio' == type) {
+            // Update the cache
+            delete this._cacheFields[field];
+            if ('checkbox' == type || 'radio' == type) {
                 this._initField(field);
             }