在IE下,下面的代码是使删除键变成聚焦到上一个INPUT控件,回车键变成聚焦到下一个INPUT控件
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<script type="text/javascript" language="javascript">
var ins = document.getElementsByTagName('input');
function keyDown(obj, eve) {
var key = window.event.keyCode;
if(key === 8) { //删除键
window.event.keyCode = 0; //使当前操作无效
for(var i = 0; i < ins.length; i++) {
if(ins[i] === obj) {
if(i > 0) {
return ins[(i - 1)].focus(); //使前一个控件聚焦
}
}
}
} if((key === 13) || (key === 108)) { //字母区回车或数字区的回车
window.event.keyCode = 9; //Tab键
}
}
ins[0].focus();
</script>在FF下该如何实现呢??
主要是
event.keyCode = 9;
这样的写法在FF下会提示无法设置(FF下keyCode是只读)
我尝试用
initKeyEvent()
方法,但是没效果啊...
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<script type="text/javascript" language="javascript">
var ins = document.getElementsByTagName('input');
function keyDown(obj, eve) {
var key = eve.keyCode;
if(key === 8) {
eve.preventDefault(); //取消当前事件,不阻止事件传播
eve.stopPropagation(); //阻止事件传播(虽然上面一句就可以了,但是不知道什么事件传播,所以一并写上去了)
for(var i = 0; i < ins.length; i++) {
if(ins[i] === obj) {
if(i > 0) {
return setTimeout((function(i){ return (function(){ins[(i - 1)].focus();})})(i), 0);
}
}
}
} if((key === 13) || (key === 108)) {
eve.preventDefault();
eve.stopPropagation();
var newKey = document.createEvent("keyEvents");
newKey.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 9);
obj.dispatchEvent(newKey); //不起作用...也不报错
}
}
setTimeout(function(){ ins[0].focus();}, 0);
</script>
虽然也可以用类似上面的focus事件来模拟,但是想知道initKeyEvent的用法,麻烦知道的告知一下
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<script type="text/javascript" language="javascript">
var ins = document.getElementsByTagName('input');
function keyDown(obj, eve) {
var key = window.event.keyCode;
if(key === 8) { //删除键
window.event.keyCode = 0; //使当前操作无效
for(var i = 0; i < ins.length; i++) {
if(ins[i] === obj) {
if(i > 0) {
return ins[(i - 1)].focus(); //使前一个控件聚焦
}
}
}
} if((key === 13) || (key === 108)) { //字母区回车或数字区的回车
window.event.keyCode = 9; //Tab键
}
}
ins[0].focus();
</script>在FF下该如何实现呢??
主要是
event.keyCode = 9;
这样的写法在FF下会提示无法设置(FF下keyCode是只读)
我尝试用
initKeyEvent()
方法,但是没效果啊...
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<input type="text" onkeydown="keyDown(this, event)" />
<script type="text/javascript" language="javascript">
var ins = document.getElementsByTagName('input');
function keyDown(obj, eve) {
var key = eve.keyCode;
if(key === 8) {
eve.preventDefault(); //取消当前事件,不阻止事件传播
eve.stopPropagation(); //阻止事件传播(虽然上面一句就可以了,但是不知道什么事件传播,所以一并写上去了)
for(var i = 0; i < ins.length; i++) {
if(ins[i] === obj) {
if(i > 0) {
return setTimeout((function(i){ return (function(){ins[(i - 1)].focus();})})(i), 0);
}
}
}
} if((key === 13) || (key === 108)) {
eve.preventDefault();
eve.stopPropagation();
var newKey = document.createEvent("keyEvents");
newKey.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 9);
obj.dispatchEvent(newKey); //不起作用...也不报错
}
}
setTimeout(function(){ ins[0].focus();}, 0);
</script>
虽然也可以用类似上面的focus事件来模拟,但是想知道initKeyEvent的用法,麻烦知道的告知一下
var key = e.keyCode || e.which;
var keychar = String.fromCharCode(key);
这个版本用keyCode也可以取到值了,我测试过在initKeyEvent方法前alert,是可以弹出信息的,上面的代码关键是initKeyEvent方法不起作用