Bug - 文本框oninput事件,在中文输入法状态多次触发

在中文输入法状态中,还在检索拼音,这时事件就会触发,这不是我们想要的,xiaoqiu x,xi,xia,xiao....都会触发,这样频繁的请求会给接口造成挺大压力的。

我们可以使用js里面防抖动的方式或DOM3的复合事件来解决此问题。

回顾一下onchange和input事件:

oninput事件在<input>或<textarea>元素的值发生改变时触发

onchange事件也是监听文本框变化后触发,不同的是oninput事件是立即(即时)触发,onchange则是在元素失去焦点时触发

onchange的触发频率仅次于oninput事件

使用DOM3以下三种复合事件:
1、compositionstart:官方解释,触发于一段文字的输入之前,也就是在输入一段需要的文本(第一个字母开始)或语音开始输入时会触发。
2、compositionupdate访问data:正插入的新字符;
3、compositionend访问data:插入的所有字符;

文本框会填入 “虚拟文本”(待确认文本),同时触发input事件;在触发compositionend时,就是填入实际内容后(已确认文本)。

js代码:

var flag = true;
$(‘#id‘).on(‘compositionstart‘,function(){
flag = false;
})
$(‘#id‘).on(‘compositionend‘,function(){
flag = true;
})
$(‘#id‘).on(‘input‘,function(){
setTimeout(function(){
if(flag){
console.log(1);
}
},0)
})
最终理想效果:

原文地址:https://www.cnblogs.com/turnip/p/12342142.html

时间: 2024-08-11 02:13:53

Bug - 文本框oninput事件,在中文输入法状态多次触发的相关文章

输入框文本输入限制问题以及中文输入法下字符阶段的处理

输入框文本字数限制问题以及中文输入法下字符截断处理 上次博文写过处理实时获取输入表单的值,传送门: 博文地址.这次又需要处理输入框文本字数限制问题,前期的步骤思想其实就是要先实时获取输入框的值然后得到长度. 使用onkeyup判断字符长度 可以参考我前面写的博文,地址如上.onkeyup确实是可以做到实时获取的效果,因此我就是使用键盘事件来达到效果.HTML代码: <div class="content"> <textarea name="complain&

20140527-在jQuery中设置文本框回车事件

20140527-在jQuery中设置文本框回车事件 该代码要完成的效果是,用户在文本框输入完毕以后,按下回车键,立即触发"搜索"的单击事件. 例如: $("#search_user_name").keydown(function (e) {         // search_user_name为文本框ID         var curKey = e.which;         if (curKey == 13) {             // search

文本框改变事件

//文本框改变事件 $('.text_name').bind('input propertychange', function() { $('.text_div_all').css('display','none'); }); demo:http://jsfiddle.net/PVpZf/

Ext.Net文本框按键事件

1.Ext.Net文本框的按键事件有KeyPress.KeyDown.KeyUp3种 2.要启用按键事件需要设置EnableKeyEvents=true 3.文本框设置Focus之后全选,设置SelectOnFocus=true 4.KeyPress事件有的按键能触发(1.2.3....字母等),有的不能触发(BackSpace) 5.Ext.Net下禁用某个按钮的方法: 在KeyDown事件里面写方法获取按键的keyCode,如果keyCode是需要禁用的键 则e.preventDefault

点击文本框时怎样让手机输入法(键盘)不弹出

可以将文本框设置为只读, 添加属性readonly="readonly",这样可以阻止输入时就不会跳出键盘,同时可以给文本框添加一个点击事件οnclick="openClendar()",弹出选项(如:APPCAN 日历插件),选中需要的内容之后可以将值直接赋给文本框呈现:document.getElementById('time').value = string; 例子输入框:<input placeholder="选择结束日期"   i

JQuery简单的按钮点击和文本框输入事件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

jQuery中的bind绑定事件与文本框改变事件的临时解决方法

暂时没有想到什么好的解决办法,我现在加了个浏览器判断非ie的话就注册blur事件,这样有个问题就是blur实在别的控件活动焦点的时候,txtStation控件注册的方法是为了填充它紧挨着的一个下拉列表一直没什么兴趣看jQuery,就用自己那点不咋样的javascript硬撑着,今天写一个功能时想尝试一下,用bind注册事件时发现怎么都不好使$("#txtStation").bind("onpropertychange", GetStationLevel); 复制代码

IE9浏览器onpropertychange和oninput事件对delete键和剪切不触发问题解决方法

一.问题 对于输入框实时监听,常用oninput事件,低版本的IE浏览器使用onpropertychange事件.但是还有一点瑕疵就是IE9对于输入框的剪切和delete键的操作没有任何反应,这是一件非常悲伤的事情. 二.方法 亮点:keyUp监听delete和剪切,手动触发事件 代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>

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

//智能搜索提示 IntelligenceSearch: function IntelligenceSearch() { $('#keyWord').on('input', function () { if ($(this).prop('comStart')) return; // 中文输入过程中不截断 var url = $('#hKeyWord').val(); var data = { keyword: $('#keyWord').val() }; $('#words').html('')