2013-05-03 4 views
-2

Я создаю книгу контактов и хочу, чтобы таблица обновлялась по мере ввода пользователем данных, но я продолжаю получать эту ошибку в отношении «tableRow». Я попытался изменить его на разные имена функций и т. Д., Но не может найти решения.Uncaught TypeError: Object [object Object] не имеет метода tableRow

var nameField, addressField, emailField, postcodeField; 

function twoDigit(v){ 
if(v.toString().length < 2){ 
    return "0"+v.toString(); 
} else { 
    return v.toString(); 
} 
} 

var Contact = function(name, address, email, postcode){ 
this.name = name; 
this.address = address; 
this.email = email; 
this.postcode = postcode; 
this.completed = false; 
}; 

var contacts = []; 

Contact.prototype.toString = function(){ 
var s = this.name + '\n' + this.address + '\n' + this.email + + '/n' 
    + this.postcode.toString() + '\n'; 
if(this.completed){ 
    s += "Completed\n\n"; 
} else { 
    s += "Not Completed\n\n"; 
} 
return s; 
}; 

Contact.prototype.tableRow = function(){ 
var tr = "<tr><td>" + this.name + "</td><td>" + 
     this.address + "</td><td>" + this.email + 
     "</td><td>" + this.address + ">"; 
}; 


var addContact = function(nameField, addressField, emailField, postcodeField){ 
a = new Contact(nameField.value, addressField.value, emailField.value,             
postcodeField.value; 
contacts.push(a); 
}; 

var clearUI = function(){ 
var white = "#fff"; 
nameField.value = ""; 
nameField.style.backgroundColor = white; 
addressField.value = ""; 
addressField.style.backgroundColor = white; 
emailField.value = ""; 
emailField.style.backgroundColor = white; 
postcodeField.value = ""; 
postcodeField.style.backgroundColor = white; 

}; 

var updateList = function(){ 
var tableDiv = document.getElementById("table"), 
table = "<table border='1'><thead><th>Name</th><th>Address</th> 
<th>Email</th><th>Postcode</th><th>Completed</th></thead>"; 
    for(var i=0, j=contacts.length; i<j; i++){ 
    var contacts1 = contacts[i]; 
    table += contacts1.tableRow(); 
} 
table+="</table>"; 
tableDiv.innerHTML = table; 
}; 

var add = function(){ 
addContact(nameField, addressField, emailField, postcodeField); 
clearUI(); 
updateList(); 
}; 

var cancel = function(){ 
clearUI(); 
updateList(); 
}; 

window.onload = function(){ 
nameField = document.getElementById("name"); 
addressField = document.getElementById("address"); 
emailField = document.getElementById("email"); 
postcodeField = document.getElementById("postcode"); 
okButton = document.getElementById("ok"); 
okButton.onclick = add; 
cancelButton = document.getElementById("cancel"); 
cancelButton.onclick = cancel; 
clearUI(); 
}; 

var showTable = function(){ 
var tableDiv = document.getElementById("table"), 
    table = "<table border='1'><thead><th>Name</th><th>Address</th> 
<th>Email</th><th>Postcode</th></thead>"; 

for(var i=0, j=contacts.length; i<j; i++){ 
    var contacts1 = contacts[i]; 
    table += contacts1.tableRow(); 
} 
table+="</table>"; 
tableDiv.innerHTML = table; 
}; 
+0

Пожалуйста [** ** редактировать исходный вопрос] (http://stackoverflow.com/posts/16358022/edit), если вы хотите, чтобы обеспечить больше информации. –

+0

Вам нужно добавить 'Contact.prototype.tableRow = function() {}' и заставить его возвращать 'tr' html –

+0

Где определяется метод .tableRow()? –

ответ

1

Добавить функцию TableRow связаться

Contact.prototype.tableRow = function() { 
    return '<tr>' + '<td>' + this.name + '</td>' + '<td>' + this.address + '</td>' + '<td>' + this.email + '</td>' + '<td>' + this.postcode + '</td>' + '</tr>'; 
}