When you use Foundation's Abide form validation with the data-abide="ajax" attribute, every time you click submit, n+1 events are fired.
A Pen by Brian Hanna on CodePen.
When you use Foundation's Abide form validation with the data-abide="ajax" attribute, every time you click submit, n+1 events are fired.
A Pen by Brian Hanna on CodePen.
<script>$(document).foundation();</script> | |
<form name="videoForm" id="videoForm" data-abide="ajax" onsubmit="console.log(''); return false;"> | |
<textarea required data-abide-validator="videoIdLength" placeholder="Enter your video IDs here, one per line!" name="videoIDs" id="videoIDs"></textarea> | |
<small class="error">Your data is invalid.</small> | |
<button id="generate" class="button expand radius success" type="submit">Submit</button> | |
</form> |
$(document).foundation({ | |
abide: { | |
validators: { | |
videoIdLength: function(el, required, parent) { | |
var vids = $(el).val().split('\n'), | |
valid = [], | |
invalid = [], | |
ret = false; | |
if (vids.length === 0) { | |
ret = false; | |
return ret; | |
} | |
$(vids).each(function(i,e) { | |
var trim_val = e.trim(); | |
if (trim_val.length === 10 || trim_val.length === 21) { | |
if (new RegExp(/\d_(\d|\w){8}/).test(trim_val) === true) { | |
valid.push(trim_val); | |
} else { | |
invalid.push(trim_val); | |
} | |
} else { | |
invalid.push(trim_val); | |
} | |
}); | |
if (invalid.length !== 0) { | |
ret = false; | |
} else { | |
ret = true; | |
} | |
return ret; | |
} | |
} | |
} | |
}); | |
$('#generate').click(function() { | |
$('#videoForm') | |
.on('valid.fndtn.abide', function(e) { | |
if (e.namespace === 'abide.fndtn') { | |
console.log(e); | |
} | |
}) | |
.on('invalid.fndtn.abide', function(e) { | |
if (e.namespace === 'abide.fndtn') { | |
console.log(e); | |
} | |
}) | |
.clearQueue(); | |
}); |
form { | |
max-width: 500px; | |
} | |
#videoIDs { | |
font-family: monospace; | |
min-height: 300px; | |
} |