总结oninput、onchange与onpropertychange事件的用法和区别 书写搜索的神奇代码

总结oninput、onchange与onpropertychange事件的用法和区别

最近手机开发一个模糊搜索的功能组建,在网上就找到这篇文章!

前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数。过去一般都使用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事件的区别:

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事件的支持性并不容易。假定浏览器支持oninput,那么以下这段js代码的返回值为true,否则为false

‘oninput‘ in document.createElement(‘input‘)

这段代码在大多数浏览器中正常运行,除了Firefox(见bug #414853),故仍旧需要为oninput作浏览器特性检测。除此以外就没必要为其他浏览器作特性检测了,只需为inputkeydown绑定事件,并在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.163.com/jinlu_hz/blog/static/1138301522011431102044154/
译文原地址:http://mathiasbynens.be/notes/oninput
译文原作者:mathias

时间: 2024-12-28 04:19:51

总结oninput、onchange与onpropertychange事件的用法和区别 书写搜索的神奇代码的相关文章

总结oninput、onchange与onpropertychange事件的用法和区别

前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydown实现,但是这存在着一些不好的用户体验.比如onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效:而onkeydown/onkeypress/onkeyup在处理复制.粘贴.拖拽.长按键(按住键盘不放)等细节上并不完善. onpropertychange属性可

总结oninput、onchange与onpropertychange事件的使用方法和差别

前端页面开发的非常多情况下都须要实时监听文本框输入,比方腾讯微博编写140字的微博时输入框hu9i动态显示还能够输入的字数. 过去一般都使用onchange/onkeyup/onkeypress/onkeydown实现,可是这存在着一些不好的用户体验. 比方onchange事件仅仅在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效:而onkeydown/onkeypress/onkeyup在处理复制.粘贴.拖拽.长按键(按住键盘不放)等细节上并不完好. onpropertychang

oninput、onchange与onpropertychange事件的区别

onchange事件只在键盘或者鼠标操作改变对象属性,value的值发生变化且失去焦点时触发,用户js改变value时无法触发: onkeydown/onkeypress/onkeyup键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作. oninput是标准浏览器的事件,对于检测 textarea, input:text,input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发,不像 onchange 事件需要失去

html5与js关于input[type='text']文本框value改变触发事件一些属性的区别oninput,onpropertychange,onchange和文本框的value点击全选状态onclick="select();"。做购物车页面时会要用到。

关于input[type='text']文本框value改变触发事件一些属性的区别oninput,onpropertychange,onchange和文本框的点击全选状态onclick="select();".做购物车页面时会要用到. input[type='text']文本框value改变触发事件一些属性的区别oninput,onpropertychange,onchange: 1.onchange事件与onpropertychange事件的区别:onchange事件在内容改变(两次

oninput,onpropertychange,onchange的用法和区别

1.前言 由于工作需要,需实现一个类似于微博输入框的功能,在用户动态输入文字的时候,修改提示"您还可以输入XX字".如下图所示: 因此,稍微研究了一下oninput,onpropertychange,onchange的区别和用法,以及onpropertychange在ie浏览器下的一个bug. 2.oninput,onpropertychange,onchange的用法 l          onchange触发事件必须满足两个条件: a)当前对象属性改变,并且是由键盘或鼠标事件激发的

onchange事件与onpropertychange事件的区别

1.onchange事件与onpropertychange事件的区别:onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发:onpropertychange事件却是实时触发,即每增加或删除一个字符就会触发,通过js改变也会触发该事件,但是该事件IE专有.2.oninput事件与onpropertychange事件的区别:oninput事件是IE之外的大多数浏览器支持的事件,在value改变时触发,实时的,即每增加或删除一个字符就会触发,然而通过js改变value时,却不会触

兼容Firefox和IE的onpropertychange事件oninput

原文 兼容Firefox和IE的onpropertychange事件oninput onpropertychange能够捕获每次输入值的变化.例如:对象的value值被改变时,onpropertychange能够捕获每次改变,而onchange需要执行某个事件才可以捕获. 在文本框输入数据的时候,当键盘按下并放开的时候可以使用onkeyup来检测事件,onpropertychange能够捕获每次改变,而onchange需要执行某个事件才可以捕获.可是有的时候我们输入数据是采用粘贴的方式而不是键盘

[TimLinux] JavaScript input框的onfocus/onblur/oninput/onchange事件介绍

1. onfocus事件 input框获取到焦点时,触发了该事件,比如获取到焦点时,修改input框的背景色.这个功能其实可以使用css的伪类:focus来定义. 2. onblur事件 这个与onfocus事件想法,当input框失去焦点时,触发该事件,比如将输入的文本,统一修改为小写 3. onchange事件 这个事件的发生需要具有2个条件: 失去焦点 内容发生了变化 4. oninput事件 这个时HTML5新加入的事件,IE9之前是不支持的,在IE9之前使用的是: onproperty

oninput和onpropertychange事件简单介绍

oninput和onpropertychange事件简单介绍:这两个事件可能稍感陌生,但是在处理某些事件的时候却是非常的好用的,本章节将简单介绍一下这两个事件的用法.在实际应用中可能需要监听一些输入框值的变化,当然我们可以使用onkeydown.onkeypress.onkeyup 等事件完成,但是这些事件并不能够监听右键复制.黏贴和剪切等功能,这个时候oninput和onpropertychange事件的威力就显现出来了,下面就介绍一下它们.一.oninput事件:此事件是HTML5中的标准事