mirror of
https://github.com/twbs/bootstrap.git
synced 2025-01-17 09:52:29 +01:00
Merge pull request #16226 from patrickhlauke/radio-toggle-kbd-fix
Fix radio button toggle behavior for keyboard users
This commit is contained in:
commit
8549722846
@ -56,8 +56,8 @@
|
|||||||
if ($parent.length) {
|
if ($parent.length) {
|
||||||
var $input = this.$element.find('input')
|
var $input = this.$element.find('input')
|
||||||
if ($input.prop('type') == 'radio') {
|
if ($input.prop('type') == 'radio') {
|
||||||
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
|
if ($input.prop('checked')) changed = false
|
||||||
else $parent.find('.active').removeClass('active')
|
if (!$input.prop('checked') || !this.$element.hasClass('active')) $parent.find('.active').removeClass('active')
|
||||||
}
|
}
|
||||||
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
||||||
} else {
|
} else {
|
||||||
@ -107,7 +107,7 @@
|
|||||||
var $btn = $(e.target)
|
var $btn = $(e.target)
|
||||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
||||||
Plugin.call($btn, 'toggle')
|
Plugin.call($btn, 'toggle')
|
||||||
e.preventDefault()
|
if (!$(e.target).is('input[type="radio"]')) e.preventDefault()
|
||||||
})
|
})
|
||||||
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
.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))
|
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
||||||
|
@ -167,13 +167,13 @@ $(function () {
|
|||||||
assert.ok(!$btn2.find('input').prop('checked'), 'btn2 is not checked')
|
assert.ok(!$btn2.find('input').prop('checked'), 'btn2 is not checked')
|
||||||
$btn2.find('input').trigger('click')
|
$btn2.find('input').trigger('click')
|
||||||
assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
|
assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
|
||||||
assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is checked')
|
assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is not checked')
|
||||||
assert.ok($btn2.hasClass('active'), 'btn2 has active class')
|
assert.ok($btn2.hasClass('active'), 'btn2 has active class')
|
||||||
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
|
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
|
||||||
|
|
||||||
$btn2.find('input').trigger('click') // clicking an already checked radio should not un-check it
|
$btn2.find('input').trigger('click') // clicking an already checked radio should not un-check it
|
||||||
assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
|
assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
|
||||||
assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is checked')
|
assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is not checked')
|
||||||
assert.ok($btn2.hasClass('active'), 'btn2 has active class')
|
assert.ok($btn2.hasClass('active'), 'btn2 has active class')
|
||||||
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
|
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user