有没有碰到过这样的情况,在一个别人的页面上,你想为某个按钮加入自己的控制逻辑,满足条件的情况下才执行原有的事件方法呢?
这个时候在不能修改其原有方法的情况下,先获取控件的事件方法,并将其包装到自己的控制方法里面,然后再重置控件的事件方法为
自己定义的这个方法,这样就可以解决问题了。
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].οnclick=function(){}
var covclock=function(){
if(Fun())
{
CArr[CL]();
for(var i=0;i<CL;i++)
{
CArr[i]();
}
}
else
{
return;
}
}
$("#"+eid)[0].οnclick=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 οnlοad="onload()">
<input name="T" id="T" type="button" value="TTT" style="" οnclick="alert('Hard Code Event.')"/>
</body>
有没有其他的更好的方法或者写法能够实现同样的功能的,欢迎评论分享。