日期:2014-05-16  浏览次数:20460 次

跟踪input值改变的兼容处理
兼容处理input控件值改变事件

兼容处理 @ IE,FireFox,Opera,Netscape

  手动输入事件捕获:手动输入内容时会触发

  复制粘贴事件捕获:复制粘贴内容时会触发

  程序设置事件捕获:javascript程序动态设置内容时会触发

  拖入事件捕获:选定内容拖入时会触发 


一些遗憾:

WEBKIT内核浏览器(Safari,Chrome等)尚未兼容第3点:程序设置事件捕获;

第4点,拖入事件捕获用的是onmousemove处理的,如果绑定函数中有alert,将会灰常杯具 - -!

欢迎讨论。


兼容代码
JScript code
 
var easychange = function(foochange){
    if(!foochange||foochange.constructor!=Function){return;}
    try{this.watch("value",function(id,oldval,newval){foochange(newval);return newval;});}catch(e){}
    this.setAttribute('oninput','('+foochange.toString()+')(this.value)');
    this.onpropertychange = function(){foochange(this.value);};
    this.onmousemove = function(){foochange(this.value);};
    this.onkeyup = function(){foochange(this.value);};
};


调用示例
JScript code

var dx = document.getElementById('x');
easychange.call(dx,function(newvalue){document.title = newvalue;});



------解决方案--------------------
jf
------解决方案--------------------
什么意思?
------解决方案--------------------
UP
------解决方案--------------------
支持
------解决方案--------------------
呵呵 up
------解决方案--------------------
jf
------解决方案--------------------
楼主很有厉害,我以前有这想法,可没那勇气,嘿嘿!
------解决方案--------------------
不会但支持一下啊!
------解决方案--------------------
顶 支持
------解决方案--------------------
支持
------解决方案--------------------
up
------解决方案--------------------


学习···
------解决方案--------------------
我愣是没看明白,
try{this.watch("value",function(id,oldval,newval){foochange(newval);return newval;});}catch(e){}

这个this.watch是干嘛的
------解决方案--------------------
UP,学习~~~~~~~~~~~
------解决方案--------------------
学习···
------解决方案--------------------
貌似这样调用很危险

JScript code

var dx = document.getElementById('x');

easychange.call(dx,(function(){return function(newvalue){dx.value="xxxx"+dx.value}})(dx));

------解决方案--------------------
支持,谢谢~~
------解决方案--------------------
或者

easychange.call(o,(function(){return function(newvalue){o.value="name:"+newvalue}})(o));