diff --git a/example/index.html b/example/index.html index 9047b7e..5da1075 100644 --- a/example/index.html +++ b/example/index.html @@ -16,6 +16,9 @@ zipCode: function(zip) { var re = /^\d{5}(-?\d{4})?$/; return re.test(zip) ? true : "Invalid zip code (ex. 12345 or 12345-1234)"; + }, + oneChecked: function(check) { + return $(this).closest('form').find('input[name="'+$(this).attr('name')+'"]:checked').length === 1; } } }; @@ -35,6 +38,10 @@ margin-bottom: 16px; } + input[type="radio"] { + display: inline; + } + ol { list-style-type: none; } @@ -72,6 +79,11 @@ +
  • + + Home + Work +
  • diff --git a/tinyvalidation.js b/tinyvalidation.js index 63ad28a..40e66c5 100644 --- a/tinyvalidation.js +++ b/tinyvalidation.js @@ -80,10 +80,23 @@ } } }; + var validateAllFieldsWithName = function (e) { + var $radios = $form.find('input[name="'+$(this).attr('name')+'"]'); + $radios.each(function () { + if (!$(this).data('validate')) return; + $(this).trigger({ + type: "tv-radioPropagate" + }); + }); + }; if (options.validateOnBlur) $(this).blur(validateField); if (options.validateOnKeyUp) $(this).keyup(validateField); if ($(this).is(':checkbox')) $(this).change(validateField); + if ($(this).is(':radio')) { + $(this).change(validateAllFieldsWithName); + $(this).bind('tv-radioPropagate', validateField); + } if (options.disableSubmit) { $(this).bind('input', validateField); $(this).trigger('input');