2011-12-18 2 views
2

Я даю JavaScript Oop завихрения для первой попытки, и я получаю эту ошибку:Uncaught TypeError: Невозможно вызвать метод «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

Что заставляет вас думать, что элемент DOM «inputWeight» имеет свойство «webdb»? –

ответ

1

Ваша локальная переменная weight, определенная в функции, затеняет переменную weight во внешней области. Просто вызовите функцию локальной переменное что-то другое, как weight_elem:

function addWeight() { 
    var weight_elem = document.getElementById('inputWeight'); 
    var comment_elem = document.getElementById('inputComment'); 
    weight.webdb.addWeight(weight_elem.value, comment_elem.value); 
} 
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. Надеюсь, вы видите, как это вызывает проблему.

Фактически локальная переменная всегда принимается вместо глобальной. Решение: используйте разные имена.

Смежные вопросы