diff options
| author | Patrick H. Lauke <[email protected]> | 2015-05-01 12:19:19 +0100 |
|---|---|---|
| committer | Patrick H. Lauke <[email protected]> | 2015-05-01 12:19:19 +0100 |
| commit | f9cd88e09f1375702a68f03ef9895053ed14efb3 (patch) | |
| tree | 943e5ac163c6e9cdeb7d1c81e48d7f95bce6e66b /js/button.js | |
| parent | 45c798a47b307025094015a0c17693ba59a2e393 (diff) | |
| download | bootstrap-f9cd88e09f1375702a68f03ef9895053ed14efb3.tar.xz bootstrap-f9cd88e09f1375702a68f03ef9895053ed14efb3.zip | |
Fix radio and checkbox keyboard handling
Fix for problem that emerged from #16226 (`.active` class not actually
being applied) and expansion of the script to also correctly handle
keyboard interaction with checkboxes in `data-toggle="button"` groups
Diffstat (limited to 'js/button.js')
| -rw-r--r-- | js/button.js | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/js/button.js b/js/button.js index 8716aff4f..3e2e34512 100644 --- a/js/button.js +++ b/js/button.js @@ -57,14 +57,18 @@ var $input = this.$element.find('input') if ($input.prop('type') == 'radio') { if ($input.prop('checked')) changed = false - if (!$input.prop('checked') || !this.$element.hasClass('active')) $parent.find('.active').removeClass('active') + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') } else { this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') } - - if (changed) this.$element.toggleClass('active') } @@ -107,7 +111,7 @@ var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') Plugin.call($btn, 'toggle') - if (!$(e.target).is('input[type="radio"]')) e.preventDefault() + if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault() }) .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) |
