我只是注意到keypress事件的序列在Firefox和IE上的执行方式不同:在Firefox上,如果在有重点的输入上进行keypress,则该字符会写在框中,然后会触发该事件附带的函数。在IE上则相反。
所以这是我的问题,我有两个彼此相邻的输入文本,当我在第一个字符中写入单个字符时,我希望第二个字符紧随其后。这在Firefox上可以完美运行,但在IE上却不能,因为它甚至在第一个输入中写入字符之前就切换到第二个输入...
这是我使用的代码的简化(两个元素都是文本输入):
var one = document.getElementById('one');
var two = document.getElementById('two');
one.addEventListener('keypress', function(e) {
e.target.nextElementSibling.focus();
});
我该如何解决?屏幕上出现按键后,如何指示切换对焦?
最佳答案
我猜你可以这样使用setTimeout
:
var one = document.getElementById('one');
var two = document.getElementById('two');
one.addEventListener('keypress', function(e) {
setTimeout((function(elem){
return function(){
elem.focus();
};
})(e.target.nextElementSibling),0);
});
<input id="one" type="text"/><input id="two" type="text"/>
setTimeout
将在下一个执行堆栈上触发该函数,因此在元素填充之后。