我正与基本的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
事件也没有帮助。
有什么办法来防止光标移动?
为了保持光标位置,备份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);
我发现一个更好的解决方案仅仅是return false;
为了阻止默认的箭头键的行为:
input.addEventListener("keydown", function(e) {
if (e.keyCode === 38 || e.keyCode === 40) return false;
}, false);
其实,有一个更好更简单的方法来做好这项工作。
$('input').bind('keydown', function(e){
if(e.keyCode == '38' || e.keyCode == '40'){
e.preventDefault();
}
});
是的,它是那么容易!
我测试的代码,它似乎将取消事件,但如果不按箭头,很短的时间 - 它触发按键事件,该事件实际上移动光标。 只要使用preventDefault()方法也在按键事件处理函数,它应该是罚款。
可能不是。 而应该寻求将光标移动回场它在哪里结束的解决方案。 其结果将是为用户相同的,因为实在是太迅速被人察觉。
我用Google搜索了一些,发现这段代码。 我现在不能测试,这是说给不给上IE 6的工作。
textBox.setSelectionRange(textBox.value.length,textBox.value.length);