1、浏览器的按键事件

浏览器有3种按键事件——keydown,keypress和keyup,分别对应onkeydown、onkeypress和onkeyup3个事件句柄。

一个典型的按键会产生所有这三种事件,依次是keydown-->keypress-->keyup。

 <input type="text" id="text">
<script>
document.getElementById("text").onkeypress = function() {
console.log("keypress");
};
document.getElementById("text").onkeyup = function() {
console.log("keyup");
};
document.getElementById("text").onkeydown = function() {
console.log("keydown");
};
</script>

控制台输出:
keydown
keypress
keyup

2、浏览器的兼容性

(1)FireFox、Opera、Chrome

事件对应的函数有一个隐藏的变量e,表示发生事件。

e有一个属性e.which指示哪个键被按下,给出该键的索引值(按键码)。

静态函数String.fromCharCode()可以把索引值(按键码)转化成该键对应的的字符。

eg:

 <input type="text" id="text">
<script>
document.getElementById("text").onkeypress = function(e) {
alert("按键码: " + e.which + " 字符: " + String.fromCharCode(e.which));
};
</script>

FireFox、Opera、Chrome中输入:a

输出:按键码:97 字符:a

(2)IE

IE不需要e变量,window.event表示发生事件。

window.event有一个属性window.event.keyCode指示哪个键被按下,给出该键的索引值(按键码)。

静态函数String.fromCharCode()可以把索引值(按键码)转化成该键对应的的字符。

eg:

 <input type="text" id="text">
<script>
document.getElementById("text").onkeypress = function() {
alert("按键码: " + window.event.keyCode + " 字符: " + String.fromCharCode(window.event.keyCode));
};
</script>

IE中输入:a

输出:按键码:97 字符:a

3、判断浏览器类型
利用navigator对象的appName属性。

IE:navigator.appName=="Microsoft Internet Explorer"

FireFox、Opera、Chrome:navigator.appName=="Netscape"

eg:

 <input type="text" id="text">
<script>
document.getElementById("text").onkeypress = function(e) {
if (navigator.appName == "Microsoft Internet Explorer")
alert("按键码: " + window.event.keyCode + " 字符: " + String.fromCharCode(window.event.keyCode));
else if (navigator.appName == "Netscape")
alert("按键码: " + e.which + " 字符: " + String.fromCharCode(e.which));
};
</script>

IE、FireFox、Opera、Chrome中输入:a

输出:按键码:97 字符:a

简化的写法:

 <input type="text" id="text">
<script>
document.getElementById("text").onkeypress = function(e) {
e = e || window.event;
key = e.keyCode || e.which || e.charCode;
alert("按键码: " + key + " 字符: " + String.fromCharCode(key));
};
</script>

说明:IE只有keyCode属性,FireFox中有which和charCode属性,Opera中有keyCode和which属性,Chrome中有keyCode、which和charCode属性。

JavaScript中按键事件的e.keyCode || e.which || e.charCode的更多相关文章

  1. javascript 中的事件机制

    1.javascript中的事件. 事件流 javascript中的事件是以一种流的形式存在的. 一个事件会也有多个元素同时响应. 有时候这不是我们想要的效果, 我们只是需要某个特定的元素相应我们的绑 ...

  2. JavaScript中的事件对象

    JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...

  3. JavaScript 进阶教程一 JavaScript 中的事件流 - 事件冒泡和事件捕获

    先看下面的示例代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Jav ...

  4. 了解javascript中的事件(二)

    本文目录如下: 零.寒暄 一.事件的分类 二.事件代理 2.1 问题引出 2.2 什么是事件代理 2.3 完整示例 二.事件代理 三.事件代理思想的用处 四.总结 零.寒暄 这篇博客本该出现在两个月以 ...

  5. javascript中onclick事件能调用多个方法吗

    Q: javascript中onclick事件能调用多个方法吗? A: 可以的,方法如下onclick="aa();bb();cc();"每个方法用“;”分号隔开就行了

  6. 深入理解javascript中的事件循环event-loop

    前面的话 本文将详细介绍javascript中的事件循环event-loop 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与它的用途有关,作为浏览器 ...

  7. js实例分析JavaScript中的事件委托和事件绑定

    我们在学习JavaScript中,难免都会去网上查一些资料.也许偶尔就会遇到“事件委托”(也有的称我“事件代理”,这里不评论谁是谁非.以下全部称为“事件委托”),尤其是在查JavaScript的事件处 ...

  8. java基础66 JavaScript中的事件、localtion对象、screen对象(网页知识)

    1.JavaScript中的事件注册 1.1.事件的注册方式 方式1:直接在html元素上注册 <body onLoad="ready()"></body > ...

  9. JavaScript中的事件委托机制跟深浅拷贝

    今天聊下JavaScript中的事件委托跟深浅拷贝 事件委托 首先呢,介绍一下事件绑定 //方法一:通过onclick <button onclick="clickEvent()&qu ...

随机推荐

  1. Windows/Ubuntu下,将所有文件名字列举出来并保存到txt文件中

    Windows下 使用如下的DOS命令来实现: dir /s /b > lists.txt 可以将当前路径下的所有文件的"文件路径+文件名"存储在lists.txt中. 其中 ...

  2. 04day->python列表和元祖

    一.列表 1.索引.切片     索引:根据索引值获取,里表里的值     切片:和字符串相似 2.增     1)append(object),在列表的末端添加     2)insert(index ...

  3. 05. flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中)

    flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中) (1).position : <!DOCTYPE html> <html lang=" ...

  4. [LnOI2019]加特林轮盘赌

    Luogu5249 轮流开枪打一个环上的人 , 每次\(p\)的概率打死 , \(p\)始终相同 , 从第\(1\)个人开始 , 求第\(k\)个人成为唯一幸存者的概率 \(19.3.30\) 官方题 ...

  5. 基础篇:3.1)规范化:3d草绘

    本章目的:3d草绘不同于cad工程图,但也有自己的规范要求.草绘要多多练习. 1.建模草图绘制 草图是大多数 3D 模型的基础.通常,创建模型的第一步是绘制草图,随后可以从草图生成特征.将一个或多个特 ...

  6. System Verilog基础(一)

    学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...

  7. TestGc finalize()

    package com.gc; public class TestGc { public static void main(String[] args) { Man man = new Man(&qu ...

  8. vue开发的一些设置以及技巧

    引入其它css样式   需要加~   @找到的是src目录 对于常用的路径可以设置别名     @代表src                  常用的地址在webpack.base.conf.js中 ...

  9. Java中的RSA加解密工具类:RSAUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.utils.log.LogUtils; ...

  10. J15W-J45W铜质截止阀厂家,J15W-J45W铜质截止阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 J15W-J45W铜质截止阀 无极资讯网精心为您挑选了(J15W-J45W铜质截止阀)信息,其中包含了(J15W-J45W铜质截止阀)厂家,( ...