在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的用法,麻烦知道的告知一下

解决方案 »

  1.   

    FF下使用whichvar e = eve || window.event;
    var key = e.keyCode || e.which;
    var keychar = String.fromCharCode(key);
      

  2.   

    我用的是FF 3.6
    这个版本用keyCode也可以取到值了,我测试过在initKeyEvent方法前alert,是可以弹出信息的,上面的代码关键是initKeyEvent方法不起作用
      

  3.   

    newKey.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, 0x9);改成这样的话,则变成直接在INPUT里输出一个制表符