输入法的回车与消息发送快捷键回车的冲突解决方法


Posted in Javascript onAugust 09, 2016

问题:在中文输入法输入文字时按ENTER键;绑定keyup事件会将输入法中的英文文字输入到文字框并直接触发发送按钮

键盘事件:

当一个按键被pressed或者released,在每一个浏览器中都可能会触发三种键盘事件

keydown
keypress
keyup

keydown事件发生在按键被按下的时候,接着触发keypress,松开按键的时候触发keyup事件

中文输入法:

firfox:输入触发keydown,回车确认输入触发keyup
chrome:输入触发keydown、keyup,回车确认输入只触发keydown
IE:输入触发keydown、keyup,回车确认输入触发keydown,keyup
Safari:输入触发keydown、keyup,回车确认输入触发keydown,keyup
opera:输入触发keydown、keyup,回车确认输入触发keydown,keyup
在input、textarea中,中文输入法时:没有触发keypress事件

keypress事件:对中文输入法支持不好,无法响应中文输入;无法响应系统功能键

HTML代码:

<textarea name="" id="text" cols="30" rows="5"></textarea> 
  <script type="text/javascript"> 
    var text = document.getElementById('text'); 
    text.onkeydown = function(e) { 
      console.log('keydown'); 
      if(e.keyCode == 13) { 
        console.log('keydown enter send'); 
      } 
      console.log('value', text.value); 
    } 
    text.onkeypress = function(e) { 
      console.log('keypress'); 
      console.log('value', text.value); 
    } 
    text.onkeyup = function(e) { 
      console.log('keyup'); 
      if(e.keyCode == 13) { 
        console.log('keyup enter send'); 
      } 
      console.log('value', text.value); 
    } 
  </script>

英文输入法:

输入法的回车与消息发送快捷键回车的冲突解决方法

上图可得结论:

keydown、keypress发生在文字还没敲入输入框时,如果在keydown、keypress事件中输出文本框的文本,得到的是触发键盘事件前文本框中的文本;

keyup事件触发时,整个键盘事件输入文字的操作已经完成,得到的是触发键盘事件后的文本内容。

中文输入法:【没有keypress事件

输入法的回车与消息发送快捷键回车的冲突解决方法

按下enter键确认后:

输入法的回车与消息发送快捷键回车的冲突解决方法

中文输入法在输入未确定时按下回车键,keydown与keyup效果不同,keydown不会触发预设的回车方法事件

解答:

大多数输入法都是在keydown中完成输入过程,所以如果回车提交是在keyup事件中的话就会出现输完字后直接触发回车键提交,从而产生冲突问题。

办法:回车提交事件改为keydown,这时候当keydown事件发生的时候是在输入法上,而不会发生在提交框的发送事件上,进而解决了冲突。 

部分tips:

KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发KeyUp事件。

KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符

KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键

KeyPress 只能捕获单个字符

KeyDown 和KeyUp 可以捕获组合键。

KeyPress 可以捕获单个字符的大小写

KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。

KeyPress 不区分小键盘和主键盘的数字字符。

KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。

其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

在使用键盘的时候,通常会使用到CTRL+SHIFT+ALT 类似的组合键功能。

以上这篇输入法的回车与消息发送快捷键回车的冲突解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript编程起步(第一课)
Jan 10 Javascript
imgAreaSelect 中文文档帮助说明
Oct 08 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
js监听键盘事件示例代码
Jul 26 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
支持移动端原生js轮播图
Feb 16 Javascript
vue登录注册及token验证实现代码
Dec 14 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 Javascript
js实现京东秒杀倒计时功能
Jan 21 Javascript
Vue实现附件上传功能
May 28 Javascript
jQuery实现点击查看大图并以弹框的形式居中
Aug 08 #Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 #Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 #Javascript
jQuery操作cookie
Aug 08 #Javascript
轮播图组件js代码
Aug 08 #Javascript
JavaScript面试开发常用的知识点总结
Aug 08 #Javascript
Js 获取、判断浏览器版本信息的简单方法
Aug 08 #Javascript
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
一个用js实现的页内搜索代码
2007/05/23 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
Python的垃圾回收机制深入分析
2014/07/16 Python
使用C++扩展Python的功能详解
2018/01/12 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
python生成器用法实例详解
2019/11/22 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
粗加工管理制度
2014/02/04 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
学习十八大报告感言
2014/02/28 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
岗位说明书标准范本
2014/07/30 职场文书
教师求职信怎么写
2015/03/20 职场文书
党员带头倡议书
2015/04/29 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Nginx反向代理学习实例教程
2021/10/24 Servers
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
springboot读取nacos配置文件
2022/05/20 Java/Android
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript