oninput,onpropertychange,onchange的使用方法

onchange触发事件必须满足两个条件:

a)当前对象属性改变,而且是由键盘或鼠标事件激发的(脚本触发无效)

b)当前对象失去焦点(onblur);

  
onpropertychange的话,仅仅要当前对象属性发生改变,都会触发事件,可是它是IE专属的;

oninput是onpropertychange的非IE浏览器版本号,支持firefox和opera等浏览器,但有一点不同,它绑定于对象时,并不是该对象全部属性改变都能触发事件,它仅仅在对象value值发生改变时奏效。

停止冒泡事件

if (e) //停止事件冒泡 e.stopPropagation();

else  window.event.cancelBubble = true;

运行上面的代码,单击输入框发现也会触发onpropertychange,输入一个值相同也会触发这个事件,这就证明了,仅仅要有属性的值被改动就会触发该事件。

第二、既然我们发现了这个特点,那就会有一个问题了:当我们有时在输入框值发生改变时希望运行一个函数操作,但同一时候也要改动一个自己定义的属性,这样onpropertychange就会被触发两次,这个可能并非我们所希望的。

    猜想一下,既然提供了这么一个属性,那一定应该能获取到是哪个属性被改变了。试着获取參数个数及參数内容。

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  

<script type="text/javascript">  

<!--   

   document.getElementById('xx').attachEvent('onpropertychange',function(){   

        alert(arguments.length);   

       for(var i=0;i<arguments.length;i++){   

           alert(arguments[i]);   

      }   

    });   

-->  

</script>  

      运行上面一段代码,会发现弹出了1和[object],这说明该事件仅仅给回调函数传入一个參数并且是object类型。

      那我们就试试遍历一下这个object。

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  

 <script type="text/javascript">  

  <!--   

   document.getElementById('xx').attachEvent('onpropertychange',function(o){   

       for(var item in o){   

           alert(item+":"+o[item]);   

       }   

   });   

 //-->  

</script>  

     运行一下,发现有非常多个属性,但细致看我们可能会发现这么一个属性:propertyname,相信每一个人都能猜到这个属性的意思了。对,这个就是用来获取哪个属性被改动的。

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  

<script type="text/javascript">  

<!--   

  document.getElementById('xx').attachEvent('onpropertychange',function(o){   

      alert(o.propertyName);   

  });   

//-->  

</script>  

   分别单击文本框和输入一个值,会发现分别弹出了myprop和value。

  

   再回到我们開始的问题,我们仅仅须要推断是否是value被改变就ok了。

   直接看代码吧:

XML/HTML代码

<input type="text" value="xxx" id="xx" onclick="this.myprop='xx'">  

<script type="text/javascript">  

<!--   

  document.getElementById('xx').attachEvent('onpropertychange',function(o){   

     if(o.propertyName!='value')return;  //不是value改变不运行以下的操作   

      //.......函数处理   

 });   

//-->  

</script>

JS来推断文本框内容改变事件的更多相关文章

  1. JS、JQury - 文本框内容改变事件

    例子: 效果: 前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="De ...

  2. JS事件 文本框内容改变事件(onchange)通过改变文本框的内容来触发onchange事件,同时执行被调用的程序。

    文本框内容改变事件(onchange) 通过改变文本框的内容来触发onchange事件,同时执行被调用的程序. 如下代码,当用户将文本框内的文字改变后,弹出对话框"您改变了文本内容!&quo ...

  3. jquery文本框内容改变事件

    /** * 内容改变时并不会触发事件,但是在失去焦点的时候会触发. */ $("#inputid").change(function(){ console.log($(this). ...

  4. JS和vue文本框输入改变p标签的内容测试

    文本框输入,p标签的内容自动变成文本框的内容,如下是三种方法的测试: 方法1:JS里的onchange,当文本框内容改变事件,该事件里写的方法是,获取p标签本身,然后获取文本框的值,赋值给变量,最后给 ...

  5. 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)

    input 文本框内容改变,可以使用onchange或者onblur来判断,但onchange是在文本内容改变,然后失去焦点的时发生,onblur是在失去焦点时发生,不会自己去判断. 如: <i ...

  6. js监听文本框内容变化

    js监听文本框内容变化 原理很简单,就是在外部先声明一个用来记录input值的变量,然后每0.1秒比较这个值与input的值,如果发生改变,则运行自己的代码,同时改变变量.从而实现对input值改变的 ...

  7. Jquery文本框值改变事件兼容性

    Jquery文本框值改变事件(支持火狐.ie)   Jquery值改变事件支持火狐和ie浏览器,并且测试通过,绑定后台代码可以做成autocomplete控件. 具体代码列举如下: ? $(docum ...

  8. JS实时检测文本框内容长度

    通过js代码实时监测,文本框内容的变化以及长度,下图是一个实际使用场景. HTML部分: <input id="Text1" type="text" on ...

  9. js监听文本框值变化事件,就oninput & onpropertychange & onkeyup & onchange的区别

    在Web前端项目中实时监听文本框的值变化是非常常见的功能,通常最简单最容易想到的是onkeyup和onchange事件,但是在使用onkeyup来监听键盘事件的时候,监听不到鼠标右键的粘贴.复制的操作 ...

随机推荐

  1. Python--类使用

    类使用的几个注意点: 1. 类的语法结构:2. __init__(self),3. __metaclass__=type, (新式类)4. super(subclassname, self).__in ...

  2. python学习之dict的items(),values(),keys()

    Python的字典的items(), keys(), values()都返回一个list >>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'worl ...

  3. 状压DP uvalive 6560

    // 状压DP uvalive 6560 // 题意:相邻格子之间可以合并,合并后的格子的值是之前两个格子的乘积,没有合并的为0,求最大价值 // 思路: // dp[i][j]:第i行j状态下的值 ...

  4. mybatis系列-12-多对多查询

    12.1     需求 查询用户及用户购买商品信息. 12.2     sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.or ...

  5. Android中Cursor(游标)类的概念和用法

    使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...

  6. HDU-4749 Parade Show KMP算法 | DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749 题意:给两个串S和P,求S串中存在多少个与P串的大小关系一样的串. 因为数字的范围是1<= ...

  7. Entity Framework Power Tools

    http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

  8. URAL 2045 Richness of words (回文子串,贪心)

    Richness of words 题目链接: http://acm.hust.edu.cn/vjudge/contest/126823#problem/J Description For each ...

  9. JavaIO(01)File类详解

    File类 file类中的主要方法和变量   常量: 表示路径的分割符:(windows) 作用:根据java可移植性的特点,编写路径一定要符合本地操作系统要求的分割符: public static ...

  10. poj 1469 COURSES(匈牙利算法模板)

    http://poj.org/problem?id=1469 COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...