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


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 相关文章推荐
jquery删除数据记录时的弹出提示效果
May 06 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
Feb 19 Javascript
JS学习之表格的排序简单实例
May 16 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
Nov 13 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
VsCode插件整理(小结)
Sep 14 Javascript
浅谈vue中.vue文件解析流程
Apr 24 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
利用Blob进行文件上传的完整步骤
Aug 02 Javascript
ng-events类似ionic中Events的angular全局事件
Sep 05 Javascript
微信小程序顶部导航栏可滑动并选中放大
Dec 05 Javascript
JavaScript实现随机点名程序
Mar 25 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
python中关于日期时间处理的问答集锦
2013/03/08 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python中创建二维数组
2018/10/17 Python
python绘制随机网络图形示例
2019/11/21 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
外贸业务员岗位职责
2013/11/24 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
教师自我鉴定范文
2014/03/20 职场文书
明信片寄语大全
2014/04/08 职场文书
团代会闭幕词
2015/01/28 职场文书
入党自传范文2015
2015/06/26 职场文书
党章学习心得体会2016
2016/01/14 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS