总结oninput、onchange与onpropertychange事件的使用方法和差别
onchange事件仅仅在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效;而onkeydown/onkeypress/onkeyup在处理复制、粘贴、拖拽、长按键(按住键盘不放)等细节上并不完好。
onpropertychange属性可在某些情况下解决上面存在的问题,不用考虑是否失去焦点。无论js操作还是键盘鼠标手动操作,仅仅要HTML元素属性发生改变就可以马上捕获到。遗憾的是。onpropertychange为IE专属的。
HTML5中的标准事件oninput,实时监听(和ie的onpropertychange一样),只是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事件的差别:
1、onchange事件与onpropertychange事件的差别:
onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发;onpropertychange事件却是实时触发,即每添加或删除一个字符就会触发。通过js改变也会触发该事件。可是该事件IE专有。
2、oninput事件与onpropertychange事件的差别:
oninput事件是IE之外的大多数浏览器支持的事件。在value改变时触发,实时的,即每添加或删除一个字符就会触发,然而通过js改变value时。却不会触发;onpropertychange事件是不论什么属性改变都会触发的,而oninput却仅仅在value改变时触发,oninput要通过addEventListener()来注冊,onpropertychange注冊方式跟一般事件一样。(此处都是指在js中动态绑定事件,以实现内容与行为分离)
3、oninput与onpropertychange失效的情况:
(1)oninput事件:a). 当脚本中改变value时。不会触发。b).从浏览器的自己主动下拉提示中选取时,不会触发。
(2)onpropertychange事件:当input设置为disable=true后。onpropertychange不会触发。
总结
HTML5将oninput事件标准化了,该事件用来检測用户的输入状态。当然,通过使用onkeydown或者onkeyup作为取代也是能够的。这些事件设计本意也并不是如此。
全部的现代浏览器支持oninput,当中包含IE9。
对于那些老式浏览器,在不支持该事件时用keydown作为优雅降级。
不幸的是,检測浏览器对该oninput事件的支持性并不easy。
假定浏览器支持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特性检測代码要好些吧。
总结oninput、onchange与onpropertychange事件的使用方法和差别的更多相关文章
- 总结oninput、onchange与onpropertychange事件的用法和区别 书写搜索的神奇代码
总结oninput.onchange与onpropertychange事件的用法和区别 最近手机开发一个模糊搜索的功能组建,在网上就找到这篇文章! 前端页面开发的很多情况下都需要实时监听文本框输入,比 ...
- oninput、onchange与onpropertychange事件的区别, 与input输入框实时检测
这几天项目着急,同时也学到好多以前没有接触过的知识.oninput.onchange与onpropertychange事件的区别, 与input输入框实时检测 onchange事件只在键盘或者鼠标操作 ...
- 总结oninput、onchange与onpropertychange事件的用法和区别,onchange
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...
- 实时监听文本框输入 oninput、onchange与onpropertychange事件的用法和区别
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...
- 总结oninput、onchange与onpropertychange事件的用法和区别
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...
- 【转】总结oninput、onchange与onpropertychange事件的用法和区别
经本人测试在chrome下的从历史记录中选取值的时候也户触发input事件 前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过 ...
- onchange、oninput、onpropertyChange事件的异同
onchange事件适用于input\textarea\select元素上,支持各大浏览器,该事件只有在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效: oninput事件适用于inpu ...
- 兼容Firefox和IE的onpropertychange事件oninput
原文 兼容Firefox和IE的onpropertychange事件oninput onpropertychange能够捕获每次输入值的变化.例如:对象的value值被改变时,onpropertych ...
- 监听文本框输入oninput和onpropertychange事件
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...
随机推荐
- 数组内数据不使用for循环实现多个移动
题目: 有序数组中加入一个新的数据,需保持数组有序,如何操作? 方式A :for循环将后续数组依次后移. 方式B :内存拷贝 代码: /******************************** ...
- CSS3盒子模型(下)
绝对定位的盒子水平/垂直居中 普通的盒子是左右margin 改为 auto就可, 但是对于绝对定位就无效了 定位的盒子也可以水平或者垂直居中,有一个算法. 首先left 50% 父盒子的一半大小 然后 ...
- Git进行fork后如何与原仓库同步
在进行Git协同开发的时候,往往会去fork一个仓库到自己的Git中,过一段时间以后,原仓库可能会有各种提交以及修改,很可惜,Git本身并没有自动进行同步的机制,这个需要手动去执行.name如何进行自 ...
- linux 服务器性能监控(一)
这篇文章主要介绍一些常用的linux服务器性能监控命令,包括命令的常用参数.指标的含义以及一些交互操作. 几个问题 命令本身并不复杂,关键是你对操作系统基础知识的掌握和理解,先来看看下面几个问题: C ...
- 酷!美国国家安全局(NSA)开源了逆向工程工具 Ghidra
简评:2019 RSA 大会期间,NSA 正式发布了这个工具.免费 + 开源,真的有吸引力,据说体验可以和 IDA 一较高下. Ghidra 是由美国国家安全局(NSA)研究理事会创建和维护的软件逆向 ...
- Eclipse启动和手动启动tomcat访问localhost:8080显示404问题总结
前言:建议对tomcat的文件结构和相关属性有较多了解.本文以eclipse的DynamicWebProject为讲解对象. 目录: eclipse添加tomcat关联注意点 tomcat404问题归 ...
- eclip 重写从父类继承的方法的快捷操作
转载自http://blog.sina.com.cn/s/blog_53d599430101phlo.html 一.在代码中单击鼠标右键,在弹出的快捷菜单中选择“源代码(Source)”-&g ...
- 使用ggbio在R中制作弦图
分享一个制作弦图的R包:ggbio. 以下是一个简单的使用实例,效果图和代码如下. library(GenomicRanges) set.seed(1) N <- 100 gr <- GR ...
- 剑指offer二十三之二叉搜索树的后序遍历序列
一.题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 二.思路 1.二叉搜索树又称二叉排序树(Binar ...
- Java学习之路(九):Map集合
Map集合概述和特点 Map是属于java.util的一个接口Map<k,v> k:映射所维护的键的类型 v:映射值的类型 Map是将键映射到值的对象.一个映射不能包含重复的键:每个键最多 ...