有没有碰到过这样的情况,在一个别人的页面上,你想为某个按钮加入自己的控制逻辑,满足条件的情况下才执行原有的事件方法呢?
这个时候在不能修改其原有方法的情况下,先获取控件的事件方法,并将其包装到自己的控制方法里面,然后再重置控件的事件方法为
自己定义的这个方法,这样就可以解决问题了。
PS:如果使用的是live或者delegate绑定的事件,就需要找到对应的绑定到的container对象,live默认是document,否则会失败。
主要的控制方法:
function RideControlEvent(eid,Fun) { var C=$("#"+eid).data("events").click; var CL=C.length; var CArr=new Array(); for(var i=0;i<CL;i++) { CArr[i]=C[i].handler; } CArr[CL]=$("#"+eid)[0].onclick; $("#"+eid).unbind("click"); $("#"+eid)[0].onclick=function(){} var covclock=function(){ if(Fun()) { CArr[CL](); for(var i=0;i<CL;i++) { CArr[i](); } } else { return; } } $("#"+eid)[0].onclick=covclock; }
测试方法:
function onload() { $("#T").click(function(){alert("Bind Event 1.");}); $("#T").click(function(){alert("Bind Event 2.");}); var myhandler=function (){ alert("Outer Control Envet. The Master."); return true; } RideControlEvent("T",myhandler); }
html部分:
<body onload="onload()"> <input name="T" id="T" type="button" value="TTT" style="" onclick="alert('Hard Code Event.')"/> </body>
有没有其他的更好的方法或者写法能够实现同样的功能的,欢迎评论分享。