2015-06-25 157 views
0

我想直接將參數傳遞給JQuery中的函數。將回調函數傳遞給回調函數

我用

$(this).prev() 

訪問我以前的說法。但是我想在任何時候訪問這個先前的參數,而不需要prev方法。我當前的代碼如下

$(".a").click(function(){ 
    $(this).next().slideToggle(1000,function(){ 
    $(this).prev().css("background-color","green"); 

    }); 
}); 
+3

它是'參數'還是'元素'? –

+0

你試圖解決什麼問題?有沒有什麼不起作用,或者至少設計得不好? – Amit

+0

不,一切正常。只是想要一個更好的設計 – nito

回答

0

使用封閉合並事件對象和元素成一個單一的參數列表:

$(".a").click(function(eve){ 
    (function (e, p) { 
     $(e.target).next().slideToggle(1000,function(){ 
      $(p).css("background-color","green"); 
     }); 
    })(eve, $(this).prev()); 
}); 

你可以選擇完全不提供事件對象:

$(".a").click(function(eve){ 
    (function (n, p) { 
     $(n).slideToggle(1000,function(){ 
      $(p).css("background-color","green"); 
     }); 
    })($(this).next(), $(this).prev()); 
}); 

當然,你的實際回調函數可以被分解出來的事件處理程序登記:

function myClickCallback (n, p) { 
    $(n).slideToggle(1000,function(){ 
     $(p).css("background-color","green"); 
    }); 
} 

//... 

$(".a").click(function(eve){ 
    myClickCallback ($(this).next(), $(this).prev()); 
}); 

這可能會更有意義的一些觸發行動,應該有其他地方的影響。這樣的行爲絕不是值得推薦的做法 - 用戶交互的非本地效應實際上違反UI設計建議:

function myClickCallback (n, p) { 
    $(n).slideToggle(1000,function(){ 
     $(p).css("background-color","green"); 
    }); 
} 

//... 

$(".a").click(function(eve){ 
    myClickCallback ($(some_other_element).next(), $(some_other_element).prev()); 
}); 

演示

This fiddle包含想法的PoC與簡化的回調函數。

+0

我用一個閉包來將事件對象和元素合併成一個參數列表,正如你所說的。但我以前的論點(.a)沒有改變。沒有發生背景顏色! – nito

+0

您確定已爲某些元素分配了一個類'a'嗎?如果你想引用所有的錨('a'標籤),使用'$(「a」)'(沒有周期)作爲選擇器。 – collapsar

+0

完成。非常感謝 – nito