2012-08-09 77 views
0

我對jquery比較新,所以接受答案可能很明顯。我有一個插件,它提供了一個功能,但是當我運行我的程序,我得到的控制檯錯誤:JQuery函數存在但說方法undefined

Cannot call method 'createEvent' of undefined 

就像我說我可能已經錯過了一些東西簡單,但我不能找到什麼。 var desiredValue當然是檢索正確的數據,並且我確保插件在標題中正確鏈接。如果任何人有任何建議,他們可以給,這將非常感激!謝謝。

function createEvent(title,location,notes, startDate, endDate){ 
    var title= "My Appt"; 
    var location = "Los Felix"; 
    var notes = "me testing"; 
    var startDate = "2012-11-23 09:30:00"; 
    var endDate = "2012-11-23 12:30:00"; 

    cal.createEvent(title,location,notes,startDate,endDate); 
} 

var cal; 

$(document).ready(function() { 
    cal = window.plugins.calendarPlugin; 


    $('.calinfo').live('click', function() {  
    var desiredValue = $(this).parent().prev().find('.calendar').val();             
    var calInfo = desiredValue.split(','); 

    createEvent(calInfo[0], calInfo[1], calInfo[2], calInfo[3], calInfo[4]); 
    });        
});  
+0

是否定義了window.plugins.calendarPlugin? – 2012-08-09 02:47:58

+0

你可以console.log(window.plugins.calendarPlugin)嗎?另外這個插件有兩個必需的框架,你包括那些? – Ohgodwhy 2012-08-09 02:48:39

+0

@Ohgodwhy啊你熟悉的插件啊?是的,包括2個框架 – MeltingDog 2012-08-09 03:35:31

回答

1

在cal賦值後放置一個調試點。問題是你的函數中的這一行代碼:

cal.createEvent(title,location,notes,startDate,endDate); 

cal在該上下文和範圍內未定義。

我有一種感覺,

cal = window.plugins.calendarPlugin; 

不正確分配。

...感謝您的鏈接(請參閱評論) - @Ohgodwhy。

說實話,這個插件寫得不好。但是,你應該做的只是編輯功能的第一行:

window.plugins.calendarPlugin.prototype.createEvent = function(title,location,notes, startDate, endDate){ 

當你調用該函數只是使用cal.createEvent(你需要編輯的單擊事件處理這樣

這聽起來很愚蠢,但是......你確定插件的JS文件在這個腳本之前被包含和執行嗎?如果你在這個腳本執行後包含插件(日曆插件JavaScript文件),那麼calendarPlugin對象不會存在(因此,它將保持未定義)!

+0

看看這裏 - > https://github.com/felixactv8/Phonegap-Calendar-Plugin-ios這是調用他的行動的正確方法 – Ohgodwhy 2012-08-09 02:49:51

+0

無論如何,你的代碼中沒有任何東西指定你的函數作爲cal的一個屬性。 – 2012-08-09 02:50:05

+0

我沒問過問題= p – Ohgodwhy 2012-08-09 02:50:51

0

這是一個範圍問題是防止var cal從h上到頂部。在ready函數中移動你的函數聲明。您還未定義,因爲您打電話createEvent作爲cal的方法,但您尚未創建類對象。

$(document).ready(function() { 
    var cal; 
    cal = window.plugins.calendarPlugin; 

    $('.calinfo').live('click', function() { 
     var desiredValue = $(this).parent().prev().find('.calendar').val(); 
     var calInfo = desiredValue.split(','); 

     createEvent(calInfo[0], calInfo[1], calInfo[2], calInfo[3], calInfo[4]); 
    }); 

    function createEvent(title, location, notes, startDate, endDate) { 
     var title = "My Appt"; 
     var location = "Los Felix"; 
     var notes = "me testing"; 
     var startDate = "2012-11-23 09:30:00"; 
     var endDate = "2012-11-23 12:30:00"; 

     cal.createEvent(title, location, notes, startDate, endDate); 
    } 

});​ 
+0

在他最初的發帖中,cal被全球宣佈。這不是一個好習慣,至少也不是問題的根源。 – 2012-08-10 08:01:13