防止默认行为在文字输入,同时按下向上箭头(Prevent default behavior in t

2019-06-24 22:34发布

我正与基本的HTML工作<input type="text"/>文本字段的数值。

我添加JavaScript事件keyup看到当用户按下向上箭头键( e.which == 38 ) -然后我增加的数值。

代码工作很好,但有一两件事是我的错误。 Safari浏览器两者/ Mac的和Firefox /苹果机在开始的时候移动光标时,我按箭头键。 这是每一个默认行为<input type="text"/>远文本字段我所知,它是有道理的。

但是,这不是创建光标跳跃前进和后退(值改变后)非常美观效果。

在开始跳跃发生在keydown但即使有这方面的知识,我无法阻止它存在的。 我试过如下:

input.addEventListener('keydown', function(e) {
    e.preventDefault();
}, false);

e.preventDefault()keyup事件也没有帮助。

有什么办法来防止光标移动?

Answer 1:

为了保持光标位置,备份input.selectionStart变化前值。

问题是,WebKit的反应keydown和Opera喜欢keypress ,所以有杂牌组装电脑:两者的处理和节流。

var ignoreKey = false;
var handler = function(e)
{
    if (ignoreKey)
    {
        e.preventDefault();
        return;
    }
    if (e.keyCode == 38 || e.keyCode == 40) 
    {
        var pos = this.selectionStart;
        this.value = (e.keyCode == 38?1:-1)+parseInt(this.value,10);        
        this.selectionStart = pos; this.selectionEnd = pos;

        ignoreKey = true; setTimeout(function(){ignoreKey=false},1);
        e.preventDefault();
    }
};

input.addEventListener('keydown',handler,false);
input.addEventListener('keypress',handler,false);


Answer 2:

我发现一个更好的解决方案仅仅是return false; 为了阻止默认的箭头键的行为:

input.addEventListener("keydown", function(e) {
    if (e.keyCode === 38 || e.keyCode === 40) return false;
}, false);


Answer 3:

其实,有一个更好更简单的方法来做好这项工作。

$('input').bind('keydown', function(e){
    if(e.keyCode == '38' || e.keyCode == '40'){
        e.preventDefault();
    }
});

是的,它是那么容易!



Answer 4:

我测试的代码,它似乎将取消事件,但如果不按箭头,很短的时间 - 它触发按键事件,该事件实际上移动光标。 只要使用preventDefault()方法也在按键事件处理函数,它应该是罚款。



Answer 5:

可能不是。 而应该寻求将光标移动回场它在哪里结束的解决方案。 其结果将是为用户相同的,因为实在是太迅速被人察觉。

我用Google搜索了一些,发现这段代码。 我现在不能测试,这是说给不给上IE 6的工作。

textBox.setSelectionRange(textBox.value.length,textBox.value.length);



文章来源: Prevent default behavior in text input while pressing arrow up