Browse Source

Improvement for #80

nghuuphuoc 11 years ago
parent
commit
2d7dbf0114
4 changed files with 120 additions and 104 deletions
  1. 93 87
      demo/enable.html
  2. 13 8
      dist/js/bootstrapValidator.js
  3. 1 1
      dist/js/bootstrapValidator.min.js
  4. 13 8
      src/js/bootstrapValidator.js

+ 93 - 87
demo/enable.html

@@ -31,102 +31,104 @@
                                 </div>
                                 <div class="radio">
                                     <label>
-                                        <input type="radio" name="shipping_to" value="new" /> New one as following
+                                        <input type="radio" name="shipping_to" value="new" /> New address
                                     </label>
                                 </div>
                             </div>
                         </div>
 
-                        <div class="form-group">
-                            <label class="col-lg-3 control-label">Country</label>
-                            <div class="col-lg-5">
-                                <select name="country" class="form-control">
-                                    <option value="">Select a country</option>
-                                    <option value="AU">Australia</option>
-                                    <option value="CA">Canada</option>
-                                    <option value="FR">France</option>
-                                    <option value="DE">Germany</option>
-                                    <option value="IT">Italy</option>
-                                    <option value="JP">Japan</option>
-                                    <option value="GB">United Kingdom</option>
-                                    <option value="US">United States</option>
-                                    <option value="VN">Viet Nam</option>
-                                </select>
+                        <div id="newAddress">
+                            <div class="form-group">
+                                <label class="col-lg-3 control-label">Country</label>
+                                <div class="col-lg-5">
+                                    <select name="country" class="form-control" disabled>
+                                        <option value="">Select a country</option>
+                                        <option value="AU">Australia</option>
+                                        <option value="CA">Canada</option>
+                                        <option value="FR">France</option>
+                                        <option value="DE">Germany</option>
+                                        <option value="IT">Italy</option>
+                                        <option value="JP">Japan</option>
+                                        <option value="GB">United Kingdom</option>
+                                        <option value="US">United States</option>
+                                        <option value="VN">Viet Nam</option>
+                                    </select>
+                                </div>
                             </div>
-                        </div>
 
-                        <div class="form-group">
-                            <label class="col-lg-3 control-label">Street</label>
-                            <div class="col-lg-5">
-                                <input type="text" class="form-control" name="street" />
+                            <div class="form-group">
+                                <label class="col-lg-3 control-label">Street</label>
+                                <div class="col-lg-5">
+                                    <input type="text" class="form-control" name="street" disabled />
+                                </div>
                             </div>
-                        </div>
 
-                        <div class="form-group">
-                            <label class="col-lg-3 control-label">City</label>
-                            <div class="col-lg-5">
-                                <input type="text" class="form-control" name="city" />
+                            <div class="form-group">
+                                <label class="col-lg-3 control-label">City</label>
+                                <div class="col-lg-5">
+                                    <input type="text" class="form-control" name="city" disabled />
+                                </div>
                             </div>
-                        </div>
 
-                        <div class="form-group">
-                            <label class="col-lg-3 control-label">State</label>
-                            <div class="col-lg-5">
-                                <select name="state" class="form-control">
-                                    <option value="">Select a state</option>
-                                    <option value="AL">Alabama</option>
-                                    <option value="AK">Alaska</option>
-                                    <option value="AZ">Arizona</option>
-                                    <option value="AR">Arkansas</option>
-                                    <option value="CA">California</option>
-                                    <option value="CO">Colorado</option>
-                                    <option value="CT">Connecticut</option>
-                                    <option value="DE">Delaware</option>
-                                    <option value="DC">District of Columbia</option>
-                                    <option value="FL">Florida</option>
-                                    <option value="GA">Georgia</option>
-                                    <option value="HI">Hawaii</option>
-                                    <option value="ID">Idaho</option>
-                                    <option value="IL">Illinois</option>
-                                    <option value="IN">Indiana</option>
-                                    <option value="IA">Iowa</option>
-                                    <option value="KS">Kansas</option>
-                                    <option value="KY">Kentucky</option>
-                                    <option value="LA">Louisiana</option>
-                                    <option value="ME">Maine</option>
-                                    <option value="MD">Maryland</option>
-                                    <option value="MA">Massachusetts</option>
-                                    <option value="MI">Michigan</option>
-                                    <option value="MN">Minnesota</option>
-                                    <option value="MS">Mississippi</option>
-                                    <option value="MO">Missouri</option>
-                                    <option value="MT">Montana</option>
-                                    <option value="NE">Nebraska</option>
-                                    <option value="NV">Nevada</option>
-                                    <option value="NH">New Hampshire</option>
-                                    <option value="NJ">New Jersey</option>
-                                    <option value="NM">New Mexico</option>
-                                    <option value="NY">New York</option>
-                                    <option value="NC">North Carolina</option>
-                                    <option value="ND">North Dakota</option>
-                                    <option value="OH">Ohio</option>
-                                    <option value="OK">Oklahoma</option>
-                                    <option value="OR">Oregon</option>
-                                    <option value="PA">Pennsylvania</option>
-                                    <option value="RI">Rhode Island</option>
-                                    <option value="SC">South Carolina</option>
-                                    <option value="SD">South Dakota</option>
-                                    <option value="TN">Tennessee</option>
-                                    <option value="TX">Texas</option>
-                                    <option value="UT">Utah</option>
-                                    <option value="VT">Vermont</option>
-                                    <option value="VA">Virginia</option>
-                                    <option value="WA">Washington</option>
-                                    <option value="WV">West Virginia</option>
-                                    <option value="WI">Wisconsin</option>
-                                    <option value="WY">Wyoming</option>
-                                </select>
-                                <span class="help-block"><small>Required if you choose United States country</small></span>
+                            <div class="form-group">
+                                <label class="col-lg-3 control-label">State</label>
+                                <div class="col-lg-5">
+                                    <select name="state" class="form-control" disabled>
+                                        <option value="">Select a state</option>
+                                        <option value="AL">Alabama</option>
+                                        <option value="AK">Alaska</option>
+                                        <option value="AZ">Arizona</option>
+                                        <option value="AR">Arkansas</option>
+                                        <option value="CA">California</option>
+                                        <option value="CO">Colorado</option>
+                                        <option value="CT">Connecticut</option>
+                                        <option value="DE">Delaware</option>
+                                        <option value="DC">District of Columbia</option>
+                                        <option value="FL">Florida</option>
+                                        <option value="GA">Georgia</option>
+                                        <option value="HI">Hawaii</option>
+                                        <option value="ID">Idaho</option>
+                                        <option value="IL">Illinois</option>
+                                        <option value="IN">Indiana</option>
+                                        <option value="IA">Iowa</option>
+                                        <option value="KS">Kansas</option>
+                                        <option value="KY">Kentucky</option>
+                                        <option value="LA">Louisiana</option>
+                                        <option value="ME">Maine</option>
+                                        <option value="MD">Maryland</option>
+                                        <option value="MA">Massachusetts</option>
+                                        <option value="MI">Michigan</option>
+                                        <option value="MN">Minnesota</option>
+                                        <option value="MS">Mississippi</option>
+                                        <option value="MO">Missouri</option>
+                                        <option value="MT">Montana</option>
+                                        <option value="NE">Nebraska</option>
+                                        <option value="NV">Nevada</option>
+                                        <option value="NH">New Hampshire</option>
+                                        <option value="NJ">New Jersey</option>
+                                        <option value="NM">New Mexico</option>
+                                        <option value="NY">New York</option>
+                                        <option value="NC">North Carolina</option>
+                                        <option value="ND">North Dakota</option>
+                                        <option value="OH">Ohio</option>
+                                        <option value="OK">Oklahoma</option>
+                                        <option value="OR">Oregon</option>
+                                        <option value="PA">Pennsylvania</option>
+                                        <option value="RI">Rhode Island</option>
+                                        <option value="SC">South Carolina</option>
+                                        <option value="SD">South Dakota</option>
+                                        <option value="TN">Tennessee</option>
+                                        <option value="TX">Texas</option>
+                                        <option value="UT">Utah</option>
+                                        <option value="VT">Vermont</option>
+                                        <option value="VA">Virginia</option>
+                                        <option value="WA">Washington</option>
+                                        <option value="WV">West Virginia</option>
+                                        <option value="WI">Wisconsin</option>
+                                        <option value="WY">Wyoming</option>
+                                    </select>
+                                    <span class="help-block"><small>Required if you choose United States country</small></span>
+                                </div>
                             </div>
                         </div>
 
@@ -192,12 +194,16 @@ $(document).ready(function() {
         var bootstrapValidator = $('#checkoutForm').data('bootstrapValidator'),
             shipNewAddress     = ($(this).val() == 'new');
 
+        //$('#newAddress').toggle();
+        shipNewAddress ? $('#newAddress').find('.form-control').removeAttr('disabled')
+                       : $('#newAddress').find('.form-control').attr('disabled', 'disabled');
+
         bootstrapValidator.enableFieldValidators('street', shipNewAddress)
                           .enableFieldValidators('city', shipNewAddress)
-                          .enableFieldValidators('country', shipNewAddress);
+                          .enableFieldValidators('country', shipNewAddress)
+                          .enableFieldValidators('state', shipNewAddress && $('select[name="country"]').val() == 'US');
     });
 
-    // Require state if user choose US country
     $('select[name="country"]').on('change', function() {
         var bootstrapValidator = $('#checkoutForm').data('bootstrapValidator');
         bootstrapValidator.enableFieldValidators('state', $(this).val() == 'US');

+ 13 - 8
dist/js/bootstrapValidator.js

@@ -132,10 +132,8 @@
 
             var fields = this.getFieldElements(field);
 
-            // We don't need to validate ...
-            if (fields == null                                      // ... non-existing fields
-                || (fields.length == 1 && fields.is(':disabled')))  // ... disabled field
-            {
+            // We don't need to validate non-existing fields
+            if (fields == null) {
                 delete this.options.fields[field];
                 delete this.dfds[field];
                 return;
@@ -318,11 +316,19 @@
             }
 
             var that       = this,
-                $field     = $(this.getFieldElements(field)[0]),
+                fields     = this.getFieldElements(field),
+                $field     = $(fields[0]),
                 validators = this.options.fields[field].validators,
                 validatorName,
                 validateResult;
 
+            // We don't need to validate disabled field
+            if (fields.length == 1 && fields.is(':disabled')) {
+                delete this.options.fields[field];
+                delete this.dfds[field];
+                return;
+            }
+
             for (validatorName in validators) {
                 if (this.dfds[field][validatorName]) {
                     this.dfds[field][validatorName].reject();
@@ -508,12 +514,11 @@
          */
         enableFieldValidators: function(field, enabled) {
             this.options.fields[field]['enabled'] = enabled;
-            if (!enabled) {
-                // this.results[field] = {};
+            if (enabled) {
                 for (var v in this.options.fields[field].validators) {
                     this.results[field][v] = this.STATUS_NOT_VALIDATED;
                 }
-
+            } else {
                 var $field  = this.getFieldElements(field),
                     $parent = $field.parents('.form-group');
 

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


+ 13 - 8
src/js/bootstrapValidator.js

@@ -131,10 +131,8 @@
 
             var fields = this.getFieldElements(field);
 
-            // We don't need to validate ...
-            if (fields == null                                      // ... non-existing fields
-                || (fields.length == 1 && fields.is(':disabled')))  // ... disabled field
-            {
+            // We don't need to validate non-existing fields
+            if (fields == null) {
                 delete this.options.fields[field];
                 delete this.dfds[field];
                 return;
@@ -317,11 +315,19 @@
             }
 
             var that       = this,
-                $field     = $(this.getFieldElements(field)[0]),
+                fields     = this.getFieldElements(field),
+                $field     = $(fields[0]),
                 validators = this.options.fields[field].validators,
                 validatorName,
                 validateResult;
 
+            // We don't need to validate disabled field
+            if (fields.length == 1 && fields.is(':disabled')) {
+                delete this.options.fields[field];
+                delete this.dfds[field];
+                return;
+            }
+
             for (validatorName in validators) {
                 if (this.dfds[field][validatorName]) {
                     this.dfds[field][validatorName].reject();
@@ -507,12 +513,11 @@
          */
         enableFieldValidators: function(field, enabled) {
             this.options.fields[field]['enabled'] = enabled;
-            if (!enabled) {
-                // this.results[field] = {};
+            if (enabled) {
                 for (var v in this.options.fields[field].validators) {
                     this.results[field][v] = this.STATUS_NOT_VALIDATED;
                 }
-
+            } else {
                 var $field  = this.getFieldElements(field),
                     $parent = $field.parents('.form-group');