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>IE9删除键不能用兼容写法</title>
 6 </head>
 7 <body>
 8     <input type="text" id="ipt"/>
 9     <div id="test"></div>
10 <script type="text/javascript">
11     var oIpt = document.getElementById(‘ipt‘),
12         oTest = document.getElementById(‘test‘);
13
14     function inputEvent(){
15         oTest.innerHTML  += ‘, input‘;
16     }
17
18     function propertychangeEvent(e){
19         if(e.propertyName === ‘value‘){
20             oTest.innerHTML += oTest.innerHTML + ‘, propertychange‘;
21         }
22     }
23
24     function isIE678(){
25         return (‘a~b‘.split(/(~)/))[1] == "b";
26     }
27
28     if(isIE678()){ //IE8
29         oIpt.attachEvent(‘onpropertychange‘, propertychangeEvent);
30     }else{
31         if(window.attachEvent){   //IE
32             oIpt.attachEvent(‘oninput‘, inputEvent);
33             if(!window.ScriptEngineMinorVersion() && window.addEventListener){  //IE9
34                 alert(‘IE9‘); //只有IE9页面初始化的时候有这个弹框
35                 oIpt.attachEvent(‘onkeyup‘, function(e){
36                     if(e.keyCode === 8){
37                         //删除--触发
38                         oIpt.fireEvent(‘oninput‘);
39                     }
40                     if(e.ctrlKey && e.keyCode === 88){
41                         //剪切--触发
42                         oIpt.fireEvent(‘oninput‘);
43                     }
44                 });
45             }
46         }else{ //非IE
47             oIpt.addEventListener(‘input‘, inputEvent);
48         }
49     }
50 </script>
51 </body>
52 </html>

三、代码瑕疵

  IE9浏览器的判断不准确,网上找了很多种方法都是IE9和IE10不能完美区分,但是这样也不影响,大不了IE10和IE9走一样的程序就好了。不过,各位大神如果有更好的方式,还望推荐。

时间: 2024-10-15 18:14:21

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

onchange onpropertychange 和oninput事件

汇总onchange onpropertychange 和oninput事件的区别:                1.onchange事件与onpropertychange事件的区别:                             onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发:onpropertychange事件却是实时触发,即每增加或删除一个字符就会触发,通过js改变也会触发该事件,但是该事件IE专有.                 2.oninpu

同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴

实时检测 input.textarea输入改变事件,支持低版本IE,支持复制粘贴 检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件. 缺陷:复制粘贴时无法检测 2.onchenge 缺陷:要满足触发条件:当前对象的属性改变(由键盘或鼠标触发)且对象失去焦点 3.onpropertychange 当前对象属性改变就会触发 缺陷:只支持低版本IE 4.oninput 和onpropertychange类似,当前对象属性改变就会触发

js监听输入框值的即时变化onpropertychange、oninput

js监听输入框值的即时变化onpropertychange.oninput 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感. 要达到的效果 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.比如即时显示输入框已经被输入的字节数,或者即时读取输入的值来进行搜索引导,也就是google的关联搜索效果等. 只要我们能捕获即时事件就能做到很多事情. 需要了解的知识 首先,我们需要了解onchange和onpropert

asp.net,监听输入框值的即时变化onpropertychange、oninput

作者:自由天堂发布站点:WEB六零零 网页设计制作原文地址:http://www.web600.net/html/editor/JavaScript/201001131529.html 要达到的效果 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.比如即时显示输入框已经被输入的字节数,或者即时读取输入的值来进行搜索引导,也就是google的关联搜索效果等. 只要我们能捕获即时事件就能做到很多事情. 需要了解的知识 首先,我们需要了解onchange和o

第二十八课:focusin与focusout,submit,oninput事件的修复

focusin与focusout 这两个事件是IE的私有实现,能冒泡,它代表获得焦点或失去焦点的事件.现在只有Firefox不支持focusin,focusout事件.其实另外两个事件focus和blur是用来实现获取焦点和失去焦点的事件,但是由于这两个事件不能冒泡,所以很多浏览器就使用focusin,focusout来代替它,但是火狐不支持这两个事件,所以暂时还不能使用focusin,focusout事件代替focus和blur事件. 那么兼容性写法是怎么样的呢?如下: if (documen

oninput事件(解决onkeyup无法监听到复制黏贴)

onkeyup无法监听到复制黏贴导致的内容变化,可以使用oninput事件 注:IE下 用 onpropertychange <textarea ng-keydown = "addReason(event)" oninput = "angular.element(this).scope().addReason(event)" onproperty = "angular.element(this).scope().addReason(event)&qu

使用 onpropertychange 和 oninput 检测 input、textarea输入改变

检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件. 缺陷:复制粘贴时无法检测 2.onchenge 缺陷:要满足触发条件:当前对象的属性改变(由键盘或鼠标触发)且对象失去焦点 3.onpropertychange 当前对象属性改变就会触发 缺陷:只支持低版本IE 4.oninput 和onpropertychange类似,当前对象属性改变就会触发 缺陷:不支持低版本IE 可以看出以上几种方法都有各自的缺陷,1和2一般不能满足需

jq触发oninput事件

之前一直在用jq的change()方法来处理输入框的值变化事件,以及触发输入框的变化事件. 后来发现change()方法有个弊端,change事件的发生条件是:输入框的值value发生变化,并且输入框失去焦点之后,才会触发. 于是就找到了一个html5里面的新事件"oninput",这个事件的神奇之处就在于,当输入框的值发生变化之后,立即触发事件. 使用方法如下:(其中onpropertychange是用来兼容ie的) $("dom").bind("inp

html5之history对象 控制浏览器前进或后退事件

一.摘要: 总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题. 二.总结: 实现效果: 实现代码: 上面的编辑页面加载的时候就要先调用一次pushHistory()方法,如果不先调用一遍,在第一次点击浏览器上的返回按钮时,不会弹出提示框,必须在你按过一次手机页面上的返回键之后,你点击了提示框上的取消按钮,你再按浏览器上的返回键页面才能弹出提示框. js关键代码:  下面总结history对象的用法: a)历史记录 前进和后退的方法