在项目的开发过程中,相信大家都处理过监听用户输入的事情,一般我们会用到onkeyup、onkeydown、onkeypress、onchange、oninput事件,虽然都很熟悉了,但是还是有必要巩固一下。

onkeyup  在当前元素上释放键盘按键时触发

onkeydown  当用户按下键盘是会触发

onkeypress  当用户在键盘上按下某个键(不是所有的键都会触发,比如ctrl)以后会触发(safari上测试,回退等键不会触发)

oninput  当input元素的value属性发现变化时触发,该事件是冒泡的,如果window对象支持该事件,input元素同样也支持。

为了方便大家测试,写了一个demo

在这里我还是想讲下事件处理的流程以及事件响应和事件监听,因为我经常搞混。

大家都知道事件处理有三个阶段,捕获阶段、目标阶段、冒泡阶段

事件捕获从上到下依次触发元素事件监听(如果支持该事件)-----直到目标元素结束(可见这种事件处理方式并不是我们想要的)

事件冒泡从目标元素开始触发事件监听,然后开始向上依次触发元素事件监听----直到最顶层结束(这是最合理的事件处理方式,大多数情况下都这样处理)

定义:
1.事件流描述的是从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序。(事件处理顺序)
2.事件就是用户或浏览器自身执行的某种动作。诸如click(点击)、load(加载)、mouseover(鼠标悬停)。(我所说的事件响应)
3.事件处理程序响应某个事件的函数就叫事件处理程序(或事件侦听器)。(我所说的事件监听)

关于事件事件处理阶段写了一个demo,相信大家一看就懂了。

好了,下面进入正题,关于input事件在中文输入法时的表现。

~~搜索联想功能,大家应该都不陌生吧,不熟悉的可以去看看百度的搜索就知道了,实现的原理很简单。

监听搜索框的input事件,获取用户输入的内容传给后台------获取后台返回的结果并展示

如果是输入的纯英文很nice,没什么问题,但是输入中文呢。。

比如我想搜个“我的世界”,返回的第一个结果应该是“我”这个关键字返回的搜索结果对吧,但是并不是,返回“w”的搜索结果,原因想必大家都知道。

其实这个不是很大的问题,百度还不是这样的,跟后台勾搭一下,就这样样子吧,没啥影响,ok,搞定!

。。。。。

哈哈哈,上面只是开个玩笑,这个问题虽然不是那么重要,但是闲暇之余还是可以研究研究嘛。然后一阵google。

当当当。。。可以采用compositionstart和compositionend来捕获IME(input method editor)的启动和关闭事件。说实话,这两事件听都没听过,但是我们还是写个demo来试试吧。

$("#keyup,#keydown,#keypress,#change,#input").on("click",function(){
var oevent=this.id;
$("#oinput").off().on({
oevent:function(e){ },
compositionstart:function(){
$("#result").text("中文输入:开始")
},
compositionend:function(){
$("#result").text("中文输入:结束")
}
})
//alert(oevent)
})

demo在此

input事件以及中文输入法的处理的更多相关文章

  1. compositionEnd 和 input 事件(中文输入法问题)

    网上用 compositionstart + compositionend + input 解决中文输入法问题的办法 node.addEventListener('compositionstart', ...

  2. input 事件与汉字输入法:使用compositionend事件解决

    input 事件与汉字输入法:使用compositionend事件解决 在使用<input type="text">的input事件的时候 会遇到中文输入法的" ...

  3. 解决oninput事件在中文输入法下会取得拼音的值的问题

    在做搜索等功能时,很多时候我们需要实时获取用户输入的值,而常常会得到类似 w'm 这样的拼音.为了解决这个问题,我在网上搜索了下相关问题,发现了两个陌生的事件:compositionstart 和 c ...

  4. 解决扫码枪输入input时受中文输入法的影响

    <html><head> <meta content="text/html; charset=UTF-8" http-equiv="Cont ...

  5. 实时监听input标签输入 实时监听文本框输入 避免中文输入法无法触发onkeyup事件的问题

    前言: 对于实时监听输入,这种需求大多数都是用于一个联想字提醒,智能提醒.大家都知道onkeydown,onkeypress,onkeyup的在监听中文输入法或者右键粘贴的时候都存在一些弊端,不是那么 ...

  6. input输入中文时,拼音在输入框内会触发input事件的问题。

    问题描述: 监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中(选词)时会触发input事件,如图: 需要完成的需求就是在输入阶段不触发input中的事件,选词之后文字落 ...

  7. input事件中文触发多次问题研究

    我们在网页中经常会遇到实时搜索的情况,或者其他类似需要input实时响应的问题,一般情况下,我们是利用input和propertychange事件来监听input内容的变化来响应,但是有一个问题就是当 ...

  8. JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法

    代码如下: //智能搜索提示 IntelligenceSearch: function IntelligenceSearch() { $('#keyWord').on('input', functio ...

  9. input、textarea等输入框输入中文时,拼音在输入框内会触发input事件的问题

    监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中(选词)时会触发input事件,如图: 但是在很多情况下,只需要输入到输入框的中文字符. 解决办法: 通过查阅资料得知在 ...

随机推荐

  1. 剖析c++(三) 类对象在内存中的布局

    基本规则: 1.各data member的自然边界为其字节大小(char为1,short为2,int为4),并按照各自的自然边界对齐: 2.整个object的总自然边界为最大data memeber的 ...

  2. Oracle数据库之序列

    Oracle数据库之序列(sequence) 序列是一个计数器,它并不会与特定的表关联.我们可以通过创建Oracle序列和触发器实现表的主键自增.序列的用途一般用来填充主键和计数. 一.创建序列 语法 ...

  3. 获取元素位置信息:getBoundingClientRect

    一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...

  4. 基于jquery的页面预载入效果(loading)

    css代码: <style> #loading{ position:absolute; width:300px; top:0px; left:50%; margin-left:-150px ...

  5. Install FFmpeg, Mplayer, Mencoder, MP4Box, Flvtool2

    You can use the following tutorial to install ffmpeg and other video modules in your centos server.F ...

  6. linux下一些很有用的命令

    ps -ef | grep keepalive | grep -v grep | awk '{print $2}' | xargs kill -9 wget --random-wait -r -p - ...

  7. OpenSSL初瞻及本系列的博文的缘由

    OpenSSL初瞻及本系列的博文的缘由1.为什么要写关于“OpenSSL源码分析与学习笔记”系列博文?非常重要的两个原因是Heartbleed和学校课程.我虽然是一个非常崇尚自学的人但是并不代表我不擅 ...

  8. 转;VC++中Format函数详解

    Format是一个很常用,却又似乎很烦的方法,以下是它的完整概貌,以供大家查询之用: 一.字符串 首先看它的声明: function Format(const Format: string; cons ...

  9. 转:VC中WORD,DWORD,unsigned long,unsigned short的区别(转)

    typedef unsigned long       DWORD;typedef int                 BOOL;typedef unsigned char       BYTE; ...

  10. Xtrabackup 对MYSQL进行备份还原

    在操作MYSQL中注意两个概念: 干什么都记得 flush privileges; grant all on *.* to root@'localhost' identified by 'passwo ...