此行为特定于某些浏览器。IE 似乎会根据箭头键选择收音机,而 Chrome 则不会。
也就是说,您可以keydown
通过 jQuery 阻止事件来禁用此行为。我建议在 DIV(或包装单选按钮的其他元素)上执行此操作,以便它不适用于整个文档:
$('div.wrap').keydown(function(e) {
if (e.which > 36 && e.which < 41) {
e.preventDefault();
}
var $checkedRadio = $('input[type=radio]:checked');
if ($checkedRadio.size() > 0) {
$checkedRadio.removeAttr('checked');
if (e.which == 38 || e.which == 39) {
var $nextRadio = $checkedRadio.next('input[type=radio]');
if ($nextRadio.size() > 0) {
$nextRadio.attr('checked', 'checked');
} else {
$('input[type=radio]:first').attr('checked', 'checked');
}
}
else if (e.which == 37 || e.which == 40) {
var $prevRadio = $checkedRadio.prev('input[type=radio]');
if ($prevRadio.size() > 0) {
$prevRadio.attr('checked', 'checked');
}
else {
$('input[type=radio]:last').attr('checked', 'checked');
}
}
}
});
还有另一种方法可以实现这一点,那就是跟踪按下的键,并在 click() 事件中检查:
var keyPressed;
$('input').click(function(e) {
if (keyPressed && keyPressed > 36 && keyPressed < 41) {
e.preventDefault();
e.stopPropagation();
// key pressed during click
}
else{
// normal click
}
});
$(document).keydown(function(e) {
keyPressed = e.which;
});
$(document).keyup(function(e) {
keyPressed = null;
});