Я пытаюсь сделать текст жирным при щелчке, а при повторном щелчке он вернется в нормальное состояние. Функция addBord (e) - это то, что я получил до сих пор, но я не уверен, на правильном ли я пути и что мне делать дальше. Может ли кто-нибудь подсказать мне, что делать дальше?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN“ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" />
<title>Address Book</title>
<script type = "text/javascript">
function addressBookItem (fname, lname, email) {
this.fname= fname;
this.lname = lname;
this.email = email;
}
addressBookItem.prototype.write = function() {
// var adrbook = "<p class='ab' First Name: " + this.fname + "<br />";
var adrbook = "<tr><td>"+ this.fname + "</td>";
adrbook += "<td>" + this.lname + "</td>";
adrbook += "<td>" + this.email + "</td></tr>";
document.write(adrbook);
}
function appendRow() {
var theTable = document.getElementById("addressBookTbl");
// create a newRow
var newRow = document.createElement("tr");
var c1 = document.createElement("td");
var c2 = document.createElement("td");
var c3 = document.createElement("td");
var v1 = document.createTextNode(prompt("Please enter first name"));
var v2 = document.createTextNode(prompt("Please enter last name"));
var v3 = document.createTextNode(prompt("Please enter email"));
c1.appendChild(v1);
c2.appendChild(v2);
c3.appendChild(v3);
// newRow <- c1;
newRow.appendChild(c1);
newRow.appendChild(c2);
newRow.appendChild(c3);
theTable.appendChild(newRow);
newRow.style.color = "green";
}
newRow.addEventListener('click', addBord, false);
function addBord(e) {
var target = e.target || event.srcElement;
if (target.style.fontWeight= = "bold")
target.style.fontWeight = "normal";
else
target.style.fontWeight = "bold";
}
</script>
</head>
<body>
<script type = "text/javascript">
var aB1 = new addressBookItem('Roger', 'Williams', '[email protected]');
var aB2 = new addressBookItem ('Rose', 'Schultz', '[email protected]');
document.write("<table id=\"addressBookTbl\" border=\"2\"><tr><th>First Name</th><th>Last Name</th><th>EmailAddress</th></tr>");
aB1.write();
aB2.write();
document.write("</table>");
</script>
<form>
<br />
<input type = "button" value = "append new row" onclick = "appendRow()"/>
</form>
</body>
</html>
Код выглядит неплохо, но вы не должны использовать document.write для добавления подобных элементов HTML. stackoverflow.com/questions/802854/…
@ Энди, у него проблема с функцией addBord ()
@GuillaumeHarari, OP не работает, потому что он работает.
@Andy Что ты имеешь в виду, это работает. Когда я тестирую его, чтобы попробовать щелкнуть слово, чтобы оно выделилось жирным шрифтом, это не так. Так что это не работает так, как я предполагал
Я только что протестировал всю вашу страницу, проблема не в функции, но ваш newRow выходит за рамки, ошибка JS - test.html:43 Uncaught ReferenceError: newRow is not defined at test.html:43, потому что вы пытаетесь получить к нему доступ после appendRow
@xander, это была причина, по которой он не работал, спасибо за помощь
Вы также должны отметить, что это работает только для вновь добавленных строк с вашей функцией appendRow, также target является только одним TD-элементом, а не всей строкой. :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я получил ответ. На самом деле это довольно просто. Ваш слушатель событий находится вне функции добавления. Следуйте этому коду:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN“ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" />
<title>Address Book</title>
<script type = "text/javascript">
function addressBookItem (fname, lname, email) {
this.fname= fname;
this.lname = lname;
this.email = email;
}
addressBookItem.prototype.write = function() {
// var adrbook = "<p class='ab' First Name: " + this.fname + "<br />";
var adrbook = "<tr><td>"+ this.fname + "</td>";
adrbook += "<td>" + this.lname + "</td>";
adrbook += "<td>" + this.email + "</td></tr>";
document.write(adrbook);
}
function appendRow() {
var theTable = document.getElementById("addressBookTbl");
// create a newRow
var newRow = document.createElement("tr");
var c1 = document.createElement("td");
var c2 = document.createElement("td");
var c3 = document.createElement("td");
var v1 = document.createTextNode(prompt("Please enter first name"));
var v2 = document.createTextNode(prompt("Please enter last name"));
var v3 = document.createTextNode(prompt("Please enter email"));
c1.appendChild(v1);
c2.appendChild(v2);
c3.appendChild(v3);
// newRow <- c1;
newRow.appendChild(c1);
newRow.appendChild(c2);
newRow.appendChild(c3);
theTable.appendChild(newRow);
newRow.style.color = "green";
newRow.addEventListener('click', addBord, false);//event listener inside the function
}
function addBord(e) {
var target = e.target || event.srcElement;
if (target.style.fontWeight= = "bold")
target.style.fontWeight = "normal";
else
target.style.fontWeight = "bold";
}
</script>
</head>
<body>
<script type = "text/javascript">
var aB1 = new addressBookItem('Roger', 'Williams', '[email protected]');
var aB2 = new addressBookItem ('Rose', 'Schultz', '[email protected]');
document.write("<table id=\"addressBookTbl\" border=\"2\"><tr><th>First Name</th><th>Last Name</th><th>EmailAddress</th></tr>");
aB1.write();
aB2.write();
document.write("</table>");
</script>
<form>
<br />
<input type = "button" value = "append new row" onclick = "appendRow()"/>
</form>
</body>
</html>
Удачи!
Что ж, код работает. Каков твой вопрос?