2009-05-05 53 views
1

我有绑定到一个元素,像这样2个单击处理:jQuery多个点击处理程序..如何确保点火顺序?

其中包含我绑定到控制文件中

,我第一个处理程序,它做了一些特定于该控制

$("#mycontrol").live("click", function() { alert("foo"); }); 
功能

在使用该控件的主网页,我还有一个处理程序绑定到该元素的网页的特定功能

$("#mycontrol").live("click", function() { alert("bar"); }); 

我,因为AJAX调用改变控制所有的时间用“活”,所以为H安德勒将被重新注册。然而,我需要一种方式,使“富”始终发生在“酒吧”之前......任何建议?

+0

为什么功能变化时, Ajax被加载?为什么不隐藏第一个输入并用另一个ID显示第二个输入? – 2009-05-05 22:01:49

+1

即时通讯使用ASP AJAX与其上有复选框的数据网格。例如,当表格被排序或刷新时,我想重新将客户端单击处理程序重新绑定到带有jQuery的复选框。特定于控件的点击处理程序本身设置了一些数据,取决于复选框状态 页面上的处理程序使用复选框状态做其他事情..但控件的处理程序需要首先触发,因为它设置了将需要的数据由第二个处理程序在这种情况下 – puffpio 2009-05-05 22:21:54

回答

4

尝试单击事件组合成一个:

function foo() { alert("foo"); } 
function bar() { alert("bar"); } 
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); }); 
+1

我结束了将一个stub JS函数放在子控件的文件中......并且点击处理程序调用之后它是自己的工作 并在主页面,我重写存根功能瓦特/页面特定功能 – puffpio 2009-05-05 22:18:32

5

如何是关于:

$("#mycontrol").live("click", doFooBar); 

function doFooBar() { 
    alert("foo"); 
    alert("bar"); 
} 
+1

这将无法正常工作,因为控制和主页都包含活处理程序.. – puffpio 2009-05-05 22:19:34

2

你可以做类似如下:

var arrEventHandlers = []; 

function registerClickEvent(fnCallback) 
{ 
    arrEventHandlers.push(fnCallback); 
} 

registerClickEvent (function() { alert ("Foo"); }); 
registerClickEvent (function() { alert ("Bar"); }); 

function clickHandler() 
{ 
    for (var i = 0, size = arrEventHandlers.length; i < size; i++) 
    { 
     arrEventHandlers[i].apply (...); 
    } 
} 

$("#mycontrol").live("click", clickHandler);