2012-07-27 113 views
1
function classChanger(path,changeClass,duration){ 
    $(path).removeClass(changeClass); 
    $(this).addClass(changeClass); 
)}; 

$('.flightDetails .option').classChanger('.flightDetails .option','selected',300); 

我想創建可重用的函數。 控制檯日誌:類型錯誤:$( 「flightDetails。選項」)classChanger不是一個函數Javascript自定義函數錯誤

感謝您的幫助和時間:)

回答

5

你必須在jQuery的原型聲明你classChanger

$.fn.classChanger = function(path, changeClass, duration) { 
    $(path).removeClass(changeClass); 
    return this.addClass(changeClass); 
}; 

欲瞭解更多信息,請閱讀jQuery Plugin Authoring Guide


更新:正如在評論中指出,如果你打算爲path和選擇始終是相同的,你應該完全放棄path,並且只使用this貫穿始終。

由於您尚未具體說明您要做什麼,因此我假設您要刪除該課程,然後等待指定的duration,然後重新添加該課程。如果是這樣的話,這裏的一些示例代碼:

$.fn.classChanger = function(changeClass, duration) { 
    var $this = this; 

    setTimeout(function() { 
     $this.addClass(changeClass); 
    }, duration); 

    return this.removeClass(changeClass); 
}; 

$('.flightDetails .option').classChanger('selected', 300); 

這裏的小提琴:http://jsfiddle.net/ur7SN/

+0

爲什麼不直接使用完全刪除'path'參數,使用'的this'不是與重建相同的jQuery對象' $(路徑)'? (不可否認,OP並沒有說「path」應該與選擇器有什麼不同,但我有一個強烈的預感,他們總是相同的。) – apsillers 2012-07-27 16:26:56

+1

@apsillers - 因爲OP沒有指定他想要的東西達到這裏。在他的例子中,他使用了相同的選擇器,但情況並非總是如此。 – 2012-07-27 16:29:20

+0

夠正確。就個人而言,我會提供它作爲答案的附錄(*「如果你打算'路徑'和選擇器應該永遠是相同的......」*,但我想我的評論足夠補充了(無論如何, +1) – apsillers 2012-07-27 16:31:27