2011-12-18 78 views
2

我給的JavaScript OOP的第一次嘗試一個漩渦,我得到這個錯誤方法「XXX」:遺漏的類型錯誤:無法調用未定義

Uncaught TypeError: Cannot call method 'addWeight' of undefined

據complaning約是下一個方法weight.webdb.addWeight從全局函數addWeight被調用。

var weight = {}; 
weight.webdb = {}; 
weight.webdb.db = null; 

weight.webdb.addWeight = function() { 
    var db = weight.webdb.db; 
    db.transaction(function(tx) { 
     var addedOn = new Date(); 
     tx.executeSql('INSERT INTO weight(input,comment,date) VALUES (?,?,?)', [inputWeight, inputComment, addedOn], weight.webdb.onSuccess, weight.webdb.onError); 
    }); 
}; 

function addWeight(){ 
    var weight = document.getElementById('inputWeight'); 
    var comment = document.getElementById('inputComment'); 
    weight.webdb.addWeight(weight.value,comment.value); 
} 

演示:http://jsfiddle.net/SMbL3/1/

+0

什麼是'webdb'?哦,我必須打開小提琴才能看到你在說什麼?無論如何,您如何將DOM元素與您的任意命名對象相關聯? –

+0

是什麼讓你認爲「inputWeight」DOM元素具有「webdb」屬性? –

回答

1

該函數中定義的本地變量weight在外部範圍中映射了weight變量。只需調用函數局部變量別的東西,像weight_elem

​​
1

正如錯誤中明確規定,weight.webdb不存在。
weight是本地DOM元素,而不是全局變量。

0
var weight = document.getElementById('inputWeight'); 
var comment = document.getElementById('inputComment'); 
weight.webdb.addWeight(weight.value,comment.value); 
//^^^^     ^^^^^^ 
// 1      2 

你期待(1)指的是你在其他地方定義的全局變量weight,和(2)指的是本地變量weight。我希望你看看這是如何引發問題的。

事實上,局部變量總是被假設而不是全局的。解決方案:使用不同的名稱

相關問題