想象一下jQuery插件向页面插入元素(例如图像),图像具有Click事件的事件处理程序。例如,当我点击图像打开一个弹出div。
另一方面,我在我的页面中写了一个函数。例如,用于缓慢淡化文本框(输入标记)的函数。
所以我们有:
重要说明:我不想更改插件。我希望覆盖图像的事件处理程序而不更改插件。
编辑:我没有代码打开popupdiv,我只是在$(文档)中启动插件.ready
现在,每次点击图片后,如何在运行我的功能后强制打开弹出窗口???
答案 0 :(得分:1)
关注@ Ejay的评论
这基本上是不可能的,至少在文档中没有公开支持{我无法找到......}
但是如果你正在谈论使用jquery来绑定打开的popup div处理程序的插件,你可以试试这个:
//declare your function
function myfunction(){
alert('ok');
}
//bind click handler to image with class 'myclass'
$('.myclass').click(myfunction);
//set this handler in first with keeping other already bound events
var myH = $._data( $(".myclass")[0], "events" ).click.pop();
$._data( $(".myclass")[0], "events" ).click.unshift(myH);
如果没有其他点击处理程序,您可以按顺序颠倒:
[].reverse.call($._data($('.myclass')[0]).events.click);
查看通用演示HERE
答案 1 :(得分:0)
不清楚你在这里需要什么(除非你提供相关的代码),但我认为你需要在这里委托点击事件..
由于图像是动态添加的,因此需要在委托事件中使用..
$(document).on('click','#MyImage',function(){
alert('clicked image');
//codes to open your popopdiv
});
注意:由于添加了图像,您可能最终会为图像设置相同的IDS(除非您只添加一个图像),这是无效的.ID应该始终是唯一的...如果可以,它会更好使用类而不是id ...添加图像并使用类选择器.Myimage
..并将其委托给最接近的statis父容器比文档本身更好..
答案 2 :(得分:0)
关注@焙烤的回答
我强制旧事件处理程序作为新事件处理程序的回调运行:
$('#myBtn').click(function(){
alert(1);
});
$('#myBtn').click(function(){
alert(2);
});
$('#myBtn').click(function(){
alert(3);
});
$('#myBtn').click(function(evt){
alert(4);
});
//------Adding A Custom Function Befor All Click Event Handlers And Forcing Theme Run As Callback Of The Custom Function--------
console.clear();
var objEvents=jQuery.extend(true, {}, $._data( $("#myBtn")[0], "events" ));
$('#myBtn').unbind('click');
var callEventHandlers=function(myEventName,myEvents){
$.each(myEvents, function(i, event) {
if(i==myEventName){
$.each(event, function(j, h) {
// console.log(h.handler.toString());
h.handler.call()
});
}
});
}
$('#myBtn').click(function(evt){
$(this).fadeOut(3000,function(){callEventHandlers('click',objEvents)});
});