diff --git a/example/index.html b/example/index.html index 6be181c..3a83e82 100644 --- a/example/index.html +++ b/example/index.html @@ -9,41 +9,54 @@

Form validation test

-
+
- Help! + Error! +

Help!

- Help! + Error! +

Help!

- Help! + Error! +

Help!

+
+
+
+ +
+ + Error! +

Help!

- Help! + Error! +

Help!

- Help! + Error! +

Help!

diff --git a/plugin/jquery.bootstrap-validate.js b/plugin/jquery.bootstrap-validate.js index 74654da..d8a55db 100644 --- a/plugin/jquery.bootstrap-validate.js +++ b/plugin/jquery.bootstrap-validate.js @@ -15,6 +15,7 @@ var pluginName = 'validator', /* Default options */ defaults = { + 'errorMessageClass' : 'help-inline' }, /* All validators */ @@ -23,25 +24,40 @@ return getElementValue(element).length > 0 }, 'is-number' : function (element) { - try { - var intVal = parseInt(getElementValue(element), 10); + if(getElementValue(element).length > 0) { + try { + var intVal = parseInt(getElementValue(element), 10); + return true; + } catch (e) { + return false; + } + } + else { return true; - } catch (e) { - return false; } }, 'non-negative' : function (element) { - try { - return parseInt(getElementValue(element), 10) >= 0; - } catch (e) { - return false; + if(getElementValue(element).length > 0) { + try { + return parseInt(getElementValue(element), 10) >= 0; + } catch (e) { + return false; + } + } + else { + return true; } }, 'positive' : function (element) { - try { - return parseInt(getElementValue(element), 10) > 0; - } catch (e) { - return false; + if(getElementValue(element).length > 0) { + try { + return parseInt(getElementValue(element), 10) > 0; + } catch (e) { + return false; + } + } + else { + return true; } } }; @@ -69,7 +85,16 @@ /* Creates a validation handler */ function createValidator(validatorType, element) { return function() { - return validators[validatorType](element); + var validatorArray = validatorType.split(" "), + ready = true; + + $.each(validatorArray, function (index, validator) { + if(!validators[validator](element)) { + ready = false; + return false; + } + }); + return ready; } } @@ -86,8 +111,15 @@ that.fields.each(function (index, element) { var e = $(element); element.doValidation = createValidator(e.attr('data-validator'), e); + + /* Hide error messages from inputs */ + if(that._defaults.errorMessageClass) { + e.closest('div.control-group') + .find('.' + that._defaults.errorMessageClass) + .hide(); + } }); - + /* Handle the form submit action */ mainForm.submit(function () { @@ -103,11 +135,25 @@ /* Add the "error" class to the container group */ e.closest('div.control-group') .addClass('error'); + + /* Show the error message */ + if(that._defaults.errorMessageClass) { + e.closest('div.control-group') + .find('.' + that._defaults.errorMessageClass) + .show(); + } } else { /* If validation passed, remove the error class */ e.closest('div.control-group') .removeClass('error'); + + /* Hide the error message */ + if(that._defaults.errorMessageClass) { + e.closest('div.control-group') + .find('.' + that._defaults.errorMessageClass) + .hide(); + } } } );