$(function () { var name=null, value=null, current=null, orig=null; $('input[type="checkbox"], input[type="radio"]') .mousedown(function () { if (!this.hasAttribute('name')) return; orig = this; name = this.getAttribute('name'); var radio = this.getAttribute('type').toLowerCase() == 'radio'; if (radio) value = true; else value = !this.checked; this.checked = value; }) .hover(function () { if (name===null) return; if (this.getAttribute('name')!==name) return; if (current!==this) { current = this; this.checked = value; $(this).change(); this.focus(); } }, function () { if (name===null) return; current = null; }).change(console.log); $().mouseup(function (e) { if (name===null) return; name = null; if (e.originalTarget===orig) { var radio = orig.getAttribute('type').toLowerCase() == 'radio'; if (radio) orig.checked = true; else orig.checked = !value; } }); });