我有几个单选按钮,但我想防止按下向上/向下箭头键来更改所选的单选按钮。

如果选择一个单选按钮,然后按上/下箭头键,它将选择上一个或下一个单选按钮。相反,我希望选择保持不变。为此,我可以在某些按键上使用event.preventDefault();。但是,我仍然希望用户能够通过按箭头键在页面上上下滚动。

我怎么做?

单选按钮:

<label>Value
    <input type="radio" name="myradiobtn" value="value1">
</label>
<label>Value
    <input type="radio" name="myradiobtn" value="value2">
</label>
<label>Value
    <input type="radio" name="myradiobtn" value="value3">
</label>
<label>Value
    <input type="radio" name="myradiobtn" value="value4">
</label>
<label>Value
    <input type="radio" name="myradiobtn" value="value5">
</label>

Javascript尝试(不起作用):
$(document).keydown(function(e) {
    var arrowKeys = [37,38,39,40];
    if (arrowKeys.indexOf(e.which) !== -1) {
        $('input[type="radio"]').each(function( index ) {
          $(this).blur();
        });
    }
});

JsFiddle:

http://jsfiddle.net/w0jh9ney/

最佳答案

这个想法是从input上移开焦点并防止input keydown事件处理程序中的默认行为:

Fiddle

$('input[type="radio"]').keydown(function(e)
{
    var arrowKeys = [37, 38, 39, 40];
    if (arrowKeys.indexOf(e.which) !== -1)
    {
        $(this).blur();
        return false;
    }
});

@ user3346601解决方法提到无法在第一个keydown上滚动:

Fiddle
$('input[type="radio"]').keydown(function(e)
{
    var arrowKeys = [37, 38, 39, 40];
    if (arrowKeys.indexOf(e.which) !== -1)
    {
        $(this).blur();
        if (e.which == 38)
        {
            var y = $(window).scrollTop();
            $(window).scrollTop(y - 10);
        }
        else if (e.which == 40)
        {
            var y = $(window).scrollTop();
            $(window).scrollTop(y + 10);
        }
        return false;
    }
});

关于javascript - 防止箭头键更改所选的单选按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25972870/

10-15 07:31