aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick H. Lauke <[email protected]>2015-05-01 12:19:19 +0100
committerPatrick H. Lauke <[email protected]>2015-05-01 12:19:19 +0100
commitf9cd88e09f1375702a68f03ef9895053ed14efb3 (patch)
tree943e5ac163c6e9cdeb7d1c81e48d7f95bce6e66b
parent45c798a47b307025094015a0c17693ba59a2e393 (diff)
downloadbootstrap-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
-rw-r--r--js/button.js14
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))