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


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面向对象编程
Mar 04 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
jquery定时滑出可最小化的底部提示层特效代码
Oct 02 Javascript
Node.js插件的正确编写方式
Aug 03 Javascript
jquery向上向下取整适合分页查询
Sep 06 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
基于JavaScript实现 网页切出 网站title变化代码
Apr 03 Javascript
ashx文件获取$.ajax()方法发送的数据
May 26 Javascript
基于Jquery Ajax type的4种类型(详解)
Aug 02 jQuery
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
vue自定义一个v-model的实现代码
Jun 21 Javascript
使用element-ui table expand展开行实现手风琴效果
Mar 15 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
python编写微信远程控制电脑的程序
2018/01/05 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
师范生实习个人的自我评价
2013/09/28 职场文书
中小学生学籍证明
2014/10/25 职场文书
公司庆典主持词
2015/07/04 职场文书
办公室日常管理制度
2015/08/04 职场文书
新兵入伍决心书
2015/09/22 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书