为什么在一个input输入框中同时定义onkeypress和onkeyup时,keyup无法触发呢?
比如
<input type="text" onkeypress="alert('a')" onkeyup="alert('b')" />
当按下一个字符键时,只有弹出a,无法弹出b。。

解决方案 »

  1.   

    alert 是模式对话框,会阻隔线程!<input type="text" onkeypress="aa()" onkeyup="bb()" />var  a=0;
    function aa()
    {
     a++;}function bb()
    {
     a++;
    alert(a);
    }
      

  2.   

    alert是模式对话框,应该只会暂时阻断线程继续往下执行。。但是我点确定后,应该还是可以继续往下执行啊。。比如,我在刚才的input里再定义一个onkeydown事件,onkeydown="alert('c')",那么执行时,会先弹出c,确定后再弹出a,可无法弹出c。不知道什么原因
      

  3.   

    onkeypress和onkeyup都是的按键被释放的时候才调用的,我试了下,有时候弹出a,有时候弹出b。
      

  4.   

    alert的时候,焦点就不在input上了吧?
      

  5.   

    IE:
    通过属性注册的事件最先执行。
    attachEvent 方式注册的事件后注册的先执行。FireFox:
    不管何种方式,都是先注册的先执行。
    但是 body 很奇怪,Html 标记里用属性注册的事件总是在最后执行(<body onmousedown="func()"),而且是在所有事件的最后(居然在 document 的后面!)。但是 js 语句注册的属性事件按上述规则执行(document.body.onmousedown=func)。Opera:
    不管何种方式,都是先注册的先执行。
      

  6.   

    但现在的问题是如果同时定义的时候onkeyup不会执行啊。。
      

  7.   

    这样能看明白执行顺序了吧?<input type="text" onkeypress="keyevent('msg','keypress<br>');" onkeyup="keyevent('msg','keyup<br>');" />
    <div id="msg"></div>
    <script type="text/javascript">
    function keyevent(ObjId, EventName){
    document.getElementById(ObjId).innerHTML += EventName;
    }
    </script>
      

  8.   

    7楼的解答可以。但是我尝试了下。当按下delete、insert之类不输入字符的键时还是会忽略掉keypress的事件。只有显示keyup?这又做何解释?
      

  9.   

    因为不是所有的键都会触发 keypress事件。