この動作は特定のブラウザに固有のものです。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;
});