监听input框变化,即时搜索 compositionstart, compositionend
前话: 如果直接通过input监听, 它是键盘输入按键按下了就触发时间,这样可能导致一些问题,比如在谷歌浏览器想输入中文输入不了;
解决方案: 用 compositionstart 和 compositionend, 这个 会在选定文字后才出发 input 事件;
注意: 因为谷歌浏览器跟其他浏览器的执行顺序不同, 谷歌是 compositionstart => 监听input事件 => compositionend, 其他浏览器是 compositionstart => compositionend => 监听input事件,
所以 要在 compositionend 里面判断是否是谷歌浏览器,做浏览器的兼容输入;
另外还有一个坑, 就是 即时搜索input监听 ajax 请求接口的时候,不同做同步 async: false, 必须异步, 不然浏览器直接卡死崩溃,这个在本地测试不会出问题,到线上就出现!!!
var flag = false; // true 正在输入 // 这里 input是自己input元素,比如id #id这种
$('body').on('compositionstart', ' .search_code .layui-select-title input', function(){
flag = true;
}); $('body').on('compositionend', '.search_code .layui-select-title input', function(){
flag = false; // 判断是否是谷歌浏览器
if(!flag && isChrome()){
changeEvent(this)
} }); // 监听input事件
$('body').on('input change', '.search_code .layui-select-title input', function(){
changeEvent(this)
}) function changeEvent(_this){
if(!flag){
// 输入的值
var val = $.trim($(_this).val()); $.ajax({
url: '接口url',
type: 'post',
dataType: 'json',
contentType:'application/json; charset=utf-8',
// async: false, // 不能是同步
data: params,
success: function (res) {
console.log(res);
var data = res.data;
if (res) {
var html = ''; if (res.code != 0) {
html += '<option value="" >请输入食品编码或名称来搜索</option>';
} else {
for(var i=0; i<data.length; i++){
html += '<option value="'+ data[i].code +'">';
html += data[i].code + ' '+ data[i].name + '</option>';
}
} $('select[name=food_code]').html(html); // 保持聚焦, 不然输入后就没光标了
$('.search_code .layui-select-title input').focus(); // 重新赋值上去,不同写法自己要做改变
$('.search_code .layui-select-title input').val(val); }
}
});
}
} /**
* 判断是否是谷歌
*/
function isChrome(){
var browser = {
versions: function() {
var u = navigator.userAgent, app = navigator.appVersion;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
};
}(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
} if(browser.versions.webKit){
return true;
} return false;
}
监听input框变化,即时搜索 compositionstart, compositionend的更多相关文章
- onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法(设置readonly后onchange不起作用的解决方案)
转自:https://www.cnblogs.com/white0710/p/7338456.html 1. onchange事件监听input值变化的使用方法: <input id=" ...
- 监听INPUT值的即时变化
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 通过定时监听input框来实现onkeyup事件-
问题:因为zepto无法使用onkeyup 事件 解决方法:通过给input框绑定focus 事件,定时的去监听input的值得改变,在鼠标移出input后,清除定时器 <!DOCTYPE ht ...
- angular4 监听input框输入值的改变
angular中一般控件会有change事件,但是如果某些控件没有这个事件 我们如何监听值的变化呢? 对于双向绑定的值,当值改变后监听事件有如下写法: 1. 如果是ngModel可以用ngModelC ...
- JS监听input框的回车事件、属性值改变事件
一.介绍 在程序猿门的工作中,经常会遇见一些表单数据的提交,对于有表单的东西而言,input输入框是非常常见的,所以对于一些input的基本事件,我们需要去掌握 二.input的监听enter事件 比 ...
- juery中监听input的变化事件
$('#searchValue').bind('input propertychange', function() { searchFundList(); });
- js监听文本框变化事件
用js有两种写法: 法一: <!DOCTYPE HTMl> <html> <head> <title> new document </title& ...
- 利用原生JS实时监听input框输入值
传送门https://www.cnblogs.com/lantinggumo/p/7636715.html 传送门https://www.cnblogs.com/nailc/p/8572226.htm ...
- js监听input等表单输入框的变化事件oninput
js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变 ...
随机推荐
- Longest Common Subsequence (DP)
Given two strings, find the longest common subsequence (LCS). Your code should return the length of ...
- js原生ajax与jquery的ajax的用法区别
什么是ajax和原理? AJAX 是一种用于创建快速动态网页的技术. 通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据 XMLHttpRequest对象的基本属性: onre ...
- Windows服务启动时候报错1053
用.net 开发了一个C#语言的windows服务,在本地和测试环境,安装启动都正常,在新的线上环境报错,不能启动-报出-错误1053:服务没有及时响应启动或控制请求. 后来发现时线上.NET FRA ...
- 题解 [NOIP2015]运输计划
题解 [NOIP2015]运输计划 题面 解析 首先肯定是要求出每条路径的长度. 这个用节点到根的前缀和就行了(一开始脑抽写了个线段树...) 然后有一个显然的类似贪心的想法, 就是你改造的边肯定在最 ...
- Python 8--异常
- form表单 一个input时 回车自动提交
问题描述 form表单中,如果当前表单只有一个input输入框时,单击回车会自动提交当前表单. 解决方案 在当前form表单中添加一个隐藏的input, <input style="d ...
- learning express step(十二)
learning express view engine function const express = require('express'); const app = express(); app ...
- adb命令积累
1. 模拟事件全部是通过input命令来实现的,首先看一下input命令的使用: (原文:http://blog.csdn.net/huiguixian/article/details/1192538 ...
- AI 期刊会议
本文目的为寻找以下方向最新的发展方向和资料,比如期刊会议. AI包括以下方向:计算机视觉(CV).语言(NLP)和语音 A:计算机视觉(CV) B:语言(NLP) 1. 会议 ACL.EMNLP.NA ...
- 第二章实战补充:Python操作Mysql
( 一) 导入pymysql 基础铺垫:pymysql与MySQLdb pymysql–支持py2.py3; MySQLdb–仅支持python3; django内部默认为MySQLdb,用Pytho ...