iOS中文输入法多次触发的问题及解决方案
最近要在移动端实现一个文本框实时搜索的功能,即在文本框里每输入一个字,就向服务器请求一次搜索结果。暂且不考虑性能优化问题,第一时间想到的是用keyup实现:
$('input').on('keyup',function() {
AjaxRequest();
});
这在安卓上没有问题,但在iOS上如果使用中文输入或者输入法的预设文本,就不会触发keyup事件,因此也就无法和服务器通信。为解决这个问题,在网上查了些资料,HTML5有专门处理的事件oninput,可以响应实时输入:
$('input').on('input',function() {
AjaxRequest();
});
这样在输入中文时就能监听到文本框的变化了。但还是有问题,在输入中文时,比如“我”字,拼音是“wo”,五笔是"q",均会向服务器发送三次请求,如果打印出来,会得到“我”、“”、“我”三个值,可我只想在“我”字输出到文本框以后再发请求,这时候就需要一个专门的compositionstart和compositionend事件来处理这种情况,这是参考资料。
“compositionstart 事件触发于一段文字的输入之前(类似于 keydown 事件,但是该事件仅在若干可见字符的输入之前,而这些可见字符的输入可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)。“
最后,完整代码如下:
var lock = false;
$('input').on({
input: function() {
if(!lock) AjaxRequest(); //这里再调用一次方法是为了响应退格删除中文
},
compositionstart: function() {
lock = true;
},
compositionend: function() {
lock = false;
AjaxRequest(); //可以响应正常中文输入,但不响应使用退格删除中文
}
});
iOS中文输入法多次触发的问题及解决方案的更多相关文章
- 实时监听input标签输入 实时监听文本框输入 避免中文输入法无法触发onkeyup事件的问题
前言: 对于实时监听输入,这种需求大多数都是用于一个联想字提醒,智能提醒.大家都知道onkeydown,onkeypress,onkeyup的在监听中文输入法或者右键粘贴的时候都存在一些弊端,不是那么 ...
- iOS:UITextField中文输入法输入时对字符长度的限制
如题的问题,又是个让我抓狂了大半天的问题,还是做个记录,有与类似问题的同学可参考,但不一定对.具体问题还需具体分析.我遇到的需求是这样的:有一个输入框,输入框内输入文字,文字字数限制在20字. ...
- JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法
代码如下: //智能搜索提示 IntelligenceSearch: function IntelligenceSearch() { $('#keyWord').on('input', functio ...
- compositionEnd 和 input 事件(中文输入法问题)
网上用 compositionstart + compositionend + input 解决中文输入法问题的办法 node.addEventListener('compositionstart', ...
- 类似baidu搜索 修正jquery的autocomplete在firefox下不支持中文输入法的bug
解决方法:
- 移动APP 中文输入法下的搜索优化
最近做了一个移动端的搜索功能,带有suggest.实现上并没有什么可说的,但是在后续优化上,特别是在中文输入法的情况下的优化使我学到一些新东西,所以决定写一篇文章. 下面是我简化后的基本功能实现,监听 ...
- kali2.0如何安装中文输入法
由于kali的更新源是国外网站,替换成国内的镜像站,具体操作如下: 打开终端输入 leafpad /etc/apt/sources.list 把下面的源粘贴进去,原有内容注释掉 #中科大源deb ...
- input事件以及中文输入法的处理
在项目的开发过程中,相信大家都处理过监听用户输入的事情,一般我们会用到onkeyup.onkeydown.onkeypress.onchange.oninput事件,虽然都很熟悉了,但是还是有必要巩固 ...
- js中文输入法字符串截断
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- (1) SpringBoot创建发布
一.安装jdk8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.配置环境 ...
- Python的网络编程[3] -> BOOTP 协议[1] -> BOOTP 的 Python 实现
BOOTP实现 / BOOTP Implement 目录 BOOTP 的服务器建立过程 BOOTP 的客户端建立过程 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务 ...
- [BZOJ 1800] 飞行棋
Link: BZOJ 1800 传送门 Solution: $O(n^4)$…… Code: #include <bits/stdc++.h> using namespace std; ] ...
- Android中Context详解 ---- 你所不知道的Context(转)
Android中Context详解 ---- 你所不知道的Context(转) 本文出处 :http://b ...
- 【转载】 GNU GCC 选项说明
GCC 1 Section: GNU Tools (1) Updated: 2003/12/05 Sponsor: GCC Casino Winning Content NAME gcc,g++-GN ...
- 自动化安装SQLSERVER和SQLSERVER补丁 转
2014-01-23 18:31 您还在用下一步下一步的方式安装SQLSERVER和SQLSERVER补丁吗? 介绍 假如你有50台服务器需要安装SQLSERVER,如果你用下一步下一步的方式,用远 ...
- dragon-book-exercise-answers
https://github.com/fool2fish/dragon-book-exercise-answers
- mailkit----163邮箱登录拉取邮件的坑
在使用mailkit的ImapClient拉取邮件的时候,如果我们使用的是网易的邮箱(如:163.126等),如果你没有按照网易的设置去打开IMAP协议,那么将无法登录邮箱,并且发送一封使用不安全的客 ...
- 修改weblogic端口的方法
修改weblogic的端口常用的有两种方法 方法一.登录weblogic的console.如:http://localhost:7001/console/ 1).在环境--服务器节点中点击你要修改的服 ...
- 记一次有惊无险的Linux数据恢复过程
问题阶段 起因: 昨天晚上思路不是很清晰(上了一天班回来有点蒙),还是强忍着疲惫想搞事情,结果悲剧了… … 本来想拿SD卡做一张linux烧录卡,烧录脚本是很久以前写的,有git记录,一直不成功,就回 ...