2016-03-07 68 views
1

我正在用這個撕掉我的頭髮。我有一個功能,我可以加載準備,單擊,但不是當我把它放在綁定事件處理程序。放置在綁定事件處理函數中時未定義的函數

// these work 
$(document).ready().calHeader(); 
$(".prevMonth").click().calHeader(); 

// this doesn't work 
$(".prevMonth").bind("click", calHeader); 

我試圖讓最後一個工作,因爲我不希望函數在點擊之前運行。來自幾個回答問題的解決方案表示要以第三種方式進行。但我不斷收到這個錯誤在Chrome控制檯:

Uncaught ReferenceError: calHeader is not defined(anonymous function) @ override.js:101 

爲什麼前兩個工作正常,但最後一個不是?我錯過了什麼/沒有從解釋中理解?真的會感激一些方向!

+0

'calHeader'做了什麼?看起來奇怪它適用於任何元素 – charlietfl

+0

哦,對不起,我應該提到calHeader是我創建的函數/插件(?)。它不會返回任何內容 - 只需進行一些計算,然後更改背景圖像即可。但我只想在單擊某個特定元素時運行calHeader。相反,現在,所有我已經能夠工作的是在整個頁面加載時運行calHeader。 – starchy

+1

好像你是用'$ .fn.calHeader = func ....'做成的,只需要'$ .calHeader = func ...'。然後使用'$ .calHeader()'或'$(「。prevMonth」)。on(「click」,$ .calHeader);' – charlietfl

回答

1

因爲你的插件似乎並不依賴於傳遞給它的任何選擇的元素它似乎它只不過是一個utlity功能更

而不是使用$.fn.calHeader = function你可以使用$.calHeader= function,做創建它的:

$(".prevMonth").on("click", $.calHeader); 
1

.calHeader()因爲calHeader函數是jQuery對象的一個​​屬性(即它是由插件定義的jQuery方法),而其他jQuery方法返回一個jQuery對象,因此您可以像這樣鏈接方法。它不是一個變量名,所以你不能直接調用它或者將它作爲函數參數傳遞。

這是你可以做$(".prevMonth").click()但不是click()的原因。

相關問題