zoukankan      html  css  js  c++  java
  • 转:onkeypress、onkeydown、onkeyup 区别

    在使用JavaScript做WEB键盘事件侦听捕获时,主要采用onkeypress、onkeydown、onkeyup三个事件进行出来。该三个事件的执行顺序如下:onkeydown -> onkeypress ->onkeyup。在一般情况下,采用三种键盘事件均可对键盘输入进行有效的响应。当在实际使用中,会发现这几者有些不同的差别。  
           onkeypress事件不能对系统功能键(例如:后退、删除等,其中对中文输入法不能有效响应)进行正常的响应,onkeydown和onkeyup均可以对系统功能键进行有效的拦截,但事件截获的位置不同,可以根据具体的情况选择不同的键盘事件。  
           由于onkeypress不能对系统功能键进行捕获,导致window.event对象的keyCode属性和onkeydown,onkeyup键盘事件中获取的keyCode属性不同,主要表现在onkeypress事件的keyCode对字母的大小写敏感,而onkeydown、onkeyup事件不敏感;onkeypress事件的keyCode无法区分主键盘上的数字键和付键盘数字键的,而onkeydown、onkeyup的keyCode对主付键盘的数字键敏感。  
    :在Maxthon浏览器中,onkeydown和onkeyup有连续响应两次键盘事件的BUG,onkeydown不能正常地对F1~F12的功能键进行正常的截获(onkeyup没有发现该问题),具体原因不明。不知道以后是否会进行订正。  
      
           键盘事件包括keydown、kepress和keyup三种,每次敲击键盘都会(依次?)触发这三种事件,其中keydown和keyup是比较低级的接近于硬件的事件,通俗的理解是这两个事件可以捕获到你敲击了键盘中某个键;而keypress是相对于字符层面的较为高级点的事件,这个事件能够捕捉到你键入了哪个字符。可以这样理解,如果你敲击了A键,keydown和keyup事件只是知道你敲击了A键,它并不知道你敲的是大写的A(你同时按下了Shift键)还是敲的是小写a,它是以"键"为单位,你敲入了大写的A,它只是当成你敲下了shift和A两个键而已,但是keypress可以捕捉到你是敲入的大写的A还是小写的a.  
      
           在介绍Prototype中Event对象前先介绍一下浏览器中的事件模型,浏览器中的事件主要有HTML事件、鼠标事件和键盘事件,前两种事件比较好理解,这里主要解释一下键盘事件以及它在IE和firefox中的区别.  
      
           还要理解一个概念是键盘中的键分为字符(可打印)键和功能键(不可打印),功能键包括Backspace, Enter, Escape, the arrow keys, Page Up, Page Down, and F1 through F12 等  
      
           下面说一下键盘事件的具体使用方法,   
      
           键盘事件的event对象中包含一个keyCode属性,IE中只有这一个属性,当为keydown和keyup 事件是,keycode属性表示你具体按下的键(也称为virtual keycode),当捕捉的是keypress事件时keyCode属性指的是你键入的字符(character code)  
      
           在firefox中情况有些不同,event对象包含一个keyCode属性和一个charCode属性,keydown和keyup事件的时候,keyCode表示的就是你具体按的键,charCode为0;当捕捉的是keypress事件时,keyCode为0,charCode指的是你按下的字符  

    --------------------------------

    onkeypress是在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。 
    onkeyup 是在用户放开任何先前按下的键盘键时发生。 
    onkeydown 是在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。

    onkeypress
    As of Microsoft® Internet Explorer 4.0, the onkeypress event fires and can be canceled for the following keys:

    Letters: A - Z (uppercase and lowercase)
    Numerals: 0 - 9
    Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? | ' ` " ~
    System: ESC, SPACEBAR, ENTER


    onkeydown
    As of Microsoft&reg; Internet Explorer 4.0, the onkeydown event fires for the following keys:

    Editing: DELETE, INSERT
    Function: F1 - F12
    Letters: A - Z (uppercase and lowercase)
    Navigation: HOME, END, LEFT ARROW, RIGHT ARROW, UP ARROW, DOWN ARROW
    Numerals: 0 - 9
    Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? | ' ` " ~
    System: ESC, SPACEBAR, SHIFT, TAB

    As of Internet Explorer 5, the event also fires for the following keys:

    Editing: BACKSPACE
    Navigation: PAGE UP, PAGE DOWN
    System: SHIFT+TAB

    As of Internet Explorer 5, this event can be canceled for the following keys and key combinations by specifying event.returnValue=false:

    Editing: BACKSPACE, DELETE
    Letters: A - Z (uppercase and lowercase)
    Navigation: PAGE UP, PAGE DOWN, END, HOME, LEFT ARROW, RIGHT ARROW, UP ARROW, DOWN ARROW
    Numerals: 0 - 9
    Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? | ' ` " ~
    System: SPACEBAR, ESC, TAB, SHIFT+TAB

    You can cancel all keys that fire the onkeydown event in HTML Applications, including most accelerator keys, such as ALT+F4.

    In Internet Explorer 4.0, you cannot cancel the onkeydown event, but you can use the onkeypress event to cancel keyboard events.

    两个一起按,可以这样:

    if( window.event.shiftKey && event.keyCode==xx)

    function document_onpress()
    {

    if(event.keyCode=='13')
    {
        document.all.div_Line.style.pixelLeft=document.all.div_Line.style.pixelLeft+1;
        document.all.div_Q.style.pixelLeft=document.all.div_Q.style.pixelLeft+1;
        document.all.div_T.style.pixelLeft=document.all.div_T.style.pixelLeft+1;

    }

  • 相关阅读:
    预排序遍历树算法牺牲写性能的改进
    改造PAXOS算法消灭活锁
    扣减库存策略采用订单是否锁定库存方案
    [转]java-小技巧-001-Long序列化到前端不支持
    springboot-mybatis 批量insert
    VS2010 调试启动特别慢
    C# Winform App 获取当前路径
    DevExpress PivotGridControl控件
    (JavaScript)《JS面向对象编程指南》-- JavaScript基本数据类型、数组、循环
    (HTML5)HTML5 Web Notification桌面通知实践
  • 原文地址:https://www.cnblogs.com/youxin/p/3354699.html
Copyright © 2011-2022 走看看