js监听input等表单输入框的变化事件oninput
js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变化的,复制粘贴也不能监听到,于是就用到了oninput事件来监听文本框value值的改变。由于是手机端页面没有考虑IE 这货。过去一般都使用onchange/onkeyup/onkeypress/onkeydown实现,但是这存在着一些不好的用户体验。比如onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效;而onkeydown/onkeypress/onkeyup在处理复制、粘贴、拖拽、长按键(按住键盘不放)等细节上并不完善。
onpropertychange属性可在某些情况下解决上面存在的问题,不用考虑是否失去焦点,不管js操作还是键盘鼠标手动操作,只要HTML元素属性发生改变即可立即捕获到。遗憾的是,onpropertychange为IE专属的。其他浏览器下如果想要实现这一实时监听的需求,就要用到HTML5中的标准事件oninput,不过IE9以下的浏览器是不支持oninput事件的。
所以我们需要综合oninput和onpropertychange二者来实现文本区域实时监听的功能。举例如下:
例1、对支持oninput的浏览器用oninput,其他浏览器(IE6/7/8)使用onpropertychange:
var testinput = document.createElement('input');
if('oninput' in testinput){
object.addEventListener("input",fn,false);
}else{
object.onpropertychange = fn;
}
例2、对所有ie使用onpropertychange,其他浏览器用oninput:
var ie = !!window.ActiveXObject;
if(ie){
object.onpropertychange = fn;
}else{
object.addEventListener("input",fn,false);
}
汇总onchange onpropertychange 和oninput事件的区别:
下面引用一篇译文:
HTML5将oninput事件标准化了,该事件用来检测用户的输入状态。当然,通过使用onkeydown或者onkeyup作为代替也是可以的。这些事件设计本意也并非如此,参见详情。
所有的现代浏览器支持oninput,其中包括IE9。对于那些老式浏览器,在不支持该事件时用keydown作为优雅降级。不幸的是,检测浏览器对该oninput事件的支持性并不容易。假定浏览器支持oninput,那么以下这段js代码的返回值为true,否则为false。
'oninput' in document.createElement('input')
这段代码在大多数浏览器中正常运行,除了Firefox(见bug #414853),故仍旧需要为oninput作浏览器特性检测。除此以外就没必要为其他浏览器作特性检测了,只需为input和keydown绑定事件,并在oninput事件触发之后删除onkeydown即可。示例如下:
someElement.oninput = function() {
el.onkeydown = null;
// Your code goes here
};
someElement.onkeydown = function() {
// Your code goes here
}
keydown事件仅会被触发一次(在oninput事件触发前),之后再触发oninput。虽然并不完美,但总比写上一大堆oninput特性检测代码要好些吧。
部分文字转载自http://blog.csdn.net/freshlover/article/details/39050609
js监听input等表单输入框的变化事件oninput的更多相关文章
- 原生js监听input值改变事件
哈哈哈,又来了,今天闲来无事,实验了下原生js监听input value值改变事件,下面就来说道说道: 本来写监听input值便获是用jquery的,之前的随笔写了,就是这个方法,地址:http:// ...
- js监听input输入框值的实时变化实例
情景:监听input输入框值的实时变化实例 解决方法:1.在元素上同时绑定oninput和onporpertychanger事件 实例:<script type="text/JavaS ...
- 原生js监听input值发生变化
原生JS中可以使用oninput,onpropertychange,onchange oninput,onpropertychange,onchange的用法 1) onchange 触发事件必须满足 ...
- js 对于回车时间的监听,提交表单
// ------ 监听回车事件 -----------------// document.onkeydown=keyDownSearch; function keyDownSearch(e) { / ...
- JS监听input框的回车事件、属性值改变事件
一.介绍 在程序猿门的工作中,经常会遇见一些表单数据的提交,对于有表单的东西而言,input输入框是非常常见的,所以对于一些input的基本事件,我们需要去掌握 二.input的监听enter事件 比 ...
- js监听input输入字符变化
<p class="text-input"> <input type="text" id="username" autoC ...
- js 监听手机端键盘弹出和收起事件
//这里区分不同系统,可以参考之前的文档记录 https://www.cnblogs.com/wind-wang/p/10737110.html const ua = typeof window == ...
- 【链接】js监听input输入框内容变化
https://blog.csdn.net/idomyway/article/details/79078625 $("#input1").bind("input prop ...
- js监听input是第几次click
我很多问题啊 真的是,然后我有问题就博问啊 ,博问的东西我还是放到博客里面来吧 因为我不怎么看博问 博客的话经常看, 恩 都是一开始我不懂 然后园友来解答的 真的很感谢这些园友 不多说 上代码吧 其实 ...
随机推荐
- Android中 Http请求
HttpClient public class MainActivity extends Activity { private Button button; @Override protected v ...
- HTML8表单验证
表单验证: 一.非空验证: 1.内容是不是空的. 判断值的长度是不是0.length属性.压缩空格的函数. 2.内容是不是改变了. 二.对比验证: 1.验证两个控件值的关系(相同,大小) ...
- 运维人员:走好你的IT运维路
转自 http://os.51cto.com/art/201303/387120.htm 现阶段,大多数运维人员只是处于被动低效率手工救火的状态,企业对其重视程度不高,导致部分运维人员对自己的 ...
- ecshop使用Google API及OAuth2.0登录授权(PHP)
一.申请clientID https://console.developers.google.com/project 二.开启Google+ API权限 https://console.develop ...
- Python简明教程---学习笔记
字符双引号括起,数字不括: 分隔符为逗号(,),不能为空格 变量定义时即赋值 采用utf-8编码:#-*-coding:utf-8-*-或者#coding:utf-8 字符串定义:单/双引号括起 %符 ...
- leetcode算法刷题(二)——动态规划(一)
上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...
- TCP粘包拆包问题
阿π 专注于网络协议,系统底层,服务器软件 C++博客 | 首页 | 发新随笔 | 发新文章 | | | 管理 Socket粘包问题 这两天看csdn有一些关于socket粘包,socket缓冲区设置 ...
- 转载:10 Easy Steps to a Complete Understanding of SQL
10 Easy Steps to a Complete Understanding of SQL 原文地址:http://tech.pro/tutorial/1555/10-easy-steps-to ...
- 微信cookie内容
#LWP-Cookies-1.0 Set-Cookie3: webwx_data_ticket="AQeVHpn/pdyrAQHCl++4ZvS0"; path="/&q ...
- oracle check if the display variable is set