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


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下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
Javascript仿PHP $_GET获取URL中的参数
May 12 Javascript
Json实现异步请求提交评论无需跳转其他页面
Oct 11 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
js QQ客服悬浮效果实现代码
Dec 12 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
vue项目中axios请求网络接口封装的示例代码
Dec 18 Javascript
Vue.js自定义指令学习使用详解
Oct 19 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
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
js单例模式的两种方案
2013/10/22 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
python字符串对其居中显示的方法
2015/07/11 Python
Python开发的实用计算器完整实例
2017/05/10 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python绘制雷达图实例讲解
2021/01/03 Python
名企HR怎样看待求职信
2014/02/23 职场文书
家长对老师的评语
2014/04/18 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
企业安全标语
2014/06/07 职场文书
企业读书活动总结
2014/06/30 职场文书
投资意向协议书
2015/01/29 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
读书笔记怎么写
2015/07/01 职场文书