Skip to content

Commit bcff73a

Browse files
paulcichonskijzaefferer
authored andcommitted
Bypass validation for buttons with 'formnovalidate' attribute (same as class="cancel"). Closes jquery-validationgh-623
1 parent ff26f32 commit bcff73a

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

jquery.validate.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ $.extend($.fn, {
4545
if ( $(event.target).hasClass("cancel") ) {
4646
validator.cancelSubmit = true;
4747
}
48+
49+
// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
50+
if ( $(event.target).attr("formnovalidate") !== undefined ) {
51+
validator.cancelSubmit = true;
52+
}
4853
});
4954

5055
// validate the form on submit

test/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,14 @@ <h3></h3>
310310

311311
<input type="text" id="rangeTextValid" name="rangeTextValid" min="AAA" max="ZZZ" value="NNN"/>
312312
</form>
313+
314+
<form id="bypassValidation">
315+
<input type="text" required/>
316+
<input id="normalSubmit" type="submit" value="submit"/>
317+
<input id="bypassSubmitWithCancel" type="submit" class="cancel" value="bypass1"/>
318+
<input id="bypassSubmitWithNoValidate1" type="submit" formnovalidate value="bypass1"/>
319+
<input id="bypassSubmitWithNoValidate2" type="submit" formnovalidate="formnovalidate" value="bypass2"/>
320+
</form>
313321
</div>
314322

315323
</body>

test/test.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,33 @@ test("validating groups settings parameter", function() {
814814
equal(validate.groups["input-six"], "stringGroup");
815815
});
816816

817+
test('bypassing validation on form submission',function () {
818+
var form = $("#bypassValidation");
819+
var normalSubmission = $("form#bypassValidation :input[id=normalSubmit]");
820+
var bypassSubmitWithCancel = $("form#bypassValidation :input[id=bypassSubmitWithCancel]");
821+
var bypassSubmitWithNoValidate1 = $("form#bypassValidation :input[id=bypassSubmitWithNoValidate1]");
822+
var bypassSubmitWithNoValidate2 = $("form#bypassValidation :input[id=bypassSubmitWithNoValidate2]");
823+
824+
var $v = form.validate({
825+
debug : true
826+
});
827+
828+
bypassSubmitWithCancel.click();
829+
equal($v.numberOfInvalids(), 0, "Validation was bypassed using CSS 'cancel' class.");
830+
$v.resetForm();
831+
832+
bypassSubmitWithNoValidate1.click();
833+
equal($v.numberOfInvalids(), 0, "Validation was bypassed using blank 'formnovalidate' attribute.");
834+
$v.resetForm();
835+
836+
bypassSubmitWithNoValidate2.click();
837+
equal($v.numberOfInvalids(), 0, "Validation was bypassed using 'formnovalidate=\"formnovalidate\"' attribute.");
838+
$v.resetForm();
839+
840+
normalSubmission.click();
841+
equal($v.numberOfInvalids(), 1, "Validation failed correctly");
842+
});
843+
817844

818845
module("misc");
819846

@@ -1422,3 +1449,5 @@ test("Min and Max strings set by attributes valid", function() {
14221449
var label = $('#ranges label');
14231450
equal( label.text(), "", "Correct error label" );
14241451
});
1452+
1453+

0 commit comments

Comments
 (0)