Bypass validation for buttons with 'formnovalidate' attribute (same as class="cancel"). Closes gh-623

This commit is contained in:
Paul Cichonski
2013-02-04 12:25:08 -08:00
committed by Jörn Zaefferer
parent ff26f320c6
commit bcff73ad84
3 changed files with 42 additions and 0 deletions

5
jquery.validate.js vendored
View File

@@ -45,6 +45,11 @@ $.extend($.fn, {
if ( $(event.target).hasClass("cancel") ) {
validator.cancelSubmit = true;
}
// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
if ( $(event.target).attr("formnovalidate") !== undefined ) {
validator.cancelSubmit = true;
}
});
// validate the form on submit

View File

@@ -310,6 +310,14 @@
<input type="text" id="rangeTextValid" name="rangeTextValid" min="AAA" max="ZZZ" value="NNN"/>
</form>
<form id="bypassValidation">
<input type="text" required/>
<input id="normalSubmit" type="submit" value="submit"/>
<input id="bypassSubmitWithCancel" type="submit" class="cancel" value="bypass1"/>
<input id="bypassSubmitWithNoValidate1" type="submit" formnovalidate value="bypass1"/>
<input id="bypassSubmitWithNoValidate2" type="submit" formnovalidate="formnovalidate" value="bypass2"/>
</form>
</div>
</body>

View File

@@ -814,6 +814,33 @@ test("validating groups settings parameter", function() {
equal(validate.groups["input-six"], "stringGroup");
});
test('bypassing validation on form submission',function () {
var form = $("#bypassValidation");
var normalSubmission = $("form#bypassValidation :input[id=normalSubmit]");
var bypassSubmitWithCancel = $("form#bypassValidation :input[id=bypassSubmitWithCancel]");
var bypassSubmitWithNoValidate1 = $("form#bypassValidation :input[id=bypassSubmitWithNoValidate1]");
var bypassSubmitWithNoValidate2 = $("form#bypassValidation :input[id=bypassSubmitWithNoValidate2]");
var $v = form.validate({
debug : true
});
bypassSubmitWithCancel.click();
equal($v.numberOfInvalids(), 0, "Validation was bypassed using CSS 'cancel' class.");
$v.resetForm();
bypassSubmitWithNoValidate1.click();
equal($v.numberOfInvalids(), 0, "Validation was bypassed using blank 'formnovalidate' attribute.");
$v.resetForm();
bypassSubmitWithNoValidate2.click();
equal($v.numberOfInvalids(), 0, "Validation was bypassed using 'formnovalidate=\"formnovalidate\"' attribute.");
$v.resetForm();
normalSubmission.click();
equal($v.numberOfInvalids(), 1, "Validation failed correctly");
});
module("misc");
@@ -1422,3 +1449,5 @@ test("Min and Max strings set by attributes valid", function() {
var label = $('#ranges label');
equal( label.text(), "", "Correct error label" );
});