Skip to content

Instantly share code, notes, and snippets.

@TylerRick
Created May 22, 2012 02:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TylerRick/2766129 to your computer and use it in GitHub Desktop.
Save TylerRick/2766129 to your computer and use it in GitHub Desktop.
'group-required-by-name' to require at least one checkbox in a group to be checked
//--------------------------------------------------------------------------------------------------
// This is based on the 'group-required' rule from js-webshim/dev/extras/custom-validity.js but
// allows you to specify a group name, in case you need checkboxes with different names in the same
// group.
var groupTimer = {};
$.webshims.addCustomValidityRule('group-required-by-name', function(elem, val){
var $elem = $(elem);
var name = $elem.data('group-required');
var filter = '[data-group-required="' + name + '"]'
if (!name || elem.type !== 'checkbox') { return; }
//console.log($elem, "name=", name);
var checkboxes = (elem.form && $(elem.form).find(':checkbox').filter(filter)) || $(filter);
var isValid = checkboxes.filter(':checked');
if (groupTimer[name]){
clearTimeout(groupTimer[name]);
}
groupTimer[name] = setTimeout(function(){
checkboxes
.unbind('click.groupRequiredByName')
.bind('click.groupRequiredByName', function(){
checkboxes.filter(filter).each(function(){
$.webshims.refreshCustomValidityRules(this);
});
})
;
}, 9);
if (isValid[0]) {
return false;
} else {
return $(elem).data('errormessage') ? $(elem).data('errormessage') : true;
}
}, 'Please check one of these checkboxes.');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment