我正在学习JavaScript课程,我必须创建一个JavaScript链接列表,方法是使用JS创建HTML元素,添加样式以及使用JS插入表单,以便允许用户插入列表上的新链接。
问题在于,我无法使函数正常工作,无法在现有数组中插入新对象(采用输入值形式)并显示使用新链接更新的列表。
任何对此的帮助将不胜感激!并认为我是初学者
var listeLiens = [{
titre: "So Foot",
url: "http://sofoot.com",
auteur: "yann.usaille"
},
{
titre: "Guide d'autodéfense numérique",
url: "http://guide.boum.org",
auteur: "paulochon"
},
{
titre: "L'encyclopédie en ligne Wikipedia",
url: "http://Wikipedia.org",
auteur: "annie.zette"
},
];
var dlElt = document.createElement("dl");
listeLiens.forEach(function(mot) {
var dtElt = document.createElement("dt");
var titreElt = document.createElement("a");
titreElt.textContent = mot.titre;
titreElt.href = mot.url;
var urlElt = document.createElement("span");
urlElt.textContent = mot.url;
var auteurElt = document.createElement("p");
auteurElt.textContent = "Ajouté par " + mot.auteur;
//STYLES
dtElt.style.marginBottom = "10px";
dtElt.style.backgroundColor = "#fff";
dtElt.style.padding = "15px";
titreElt.style.color = "#428bca";
titreElt.style.fontSize = "22px";
titreElt.style.textDecoration = "none";
titreElt.style.fontWeight = "bold";
urlElt.style.marginLeft = "6px";
urlElt.style.fontSize = "16px";
auteurElt.style.paddingTop = "5px";
auteurElt.style.margin = "0px";
dlElt.appendChild(dtElt);
dtElt.appendChild(titreElt);
dtElt.appendChild(urlElt);
dtElt.appendChild(auteurElt);
});
//form and add new links function
var zoneForm = document.createElement("div");
var boutonElt = document.createElement("button");
boutonElt.textContent = "Ajouter un lien";
boutonElt.style.borderRadius = "5px";
boutonElt.style.padding = "3px";
var form = document.createElement("form");
form.id = "nouveauLien";
form.style.width = "100%";
var auteur = document.createElement("input");
auteur.placeholder = "Enter link name";
auteur.id = "auteur";
auteur.setAttribute('type', "text");
auteur.setAttribute('name', "auteur");
var titre = document.createElement("input");
titre.placeholder = "Enter title name";
titre.style.marginLeft = "40px";
titre.style.width = "18%";
titre.id = "titre";
titre.setAttribute('type', "text");
titre.setAttribute('name', "titre");
var url = document.createElement("input");
url.placeholder = "Enter link address";
url.style.marginLeft = "40px";
url.style.width = "23%";
url.setAttribute('type', "text");
url.setAttribute('name', "url");
var boutonValider = document.createElement("input");
boutonValider.style.marginLeft = "40px";
boutonValider.style.borderRadius = "5px";
boutonValider.style.width = "7%";
boutonValider.style.padding = "3px";
boutonValider.setAttribute('type', "submit");
boutonValider.setAttribute('value', "Ajouter");
form.appendChild(auteur);
form.appendChild(titre);
form.appendChild(url);
form.appendChild(boutonValider);
zoneForm.appendChild(boutonElt);
boutonElt.addEventListener("click", function() {
if (boutonElt) {
boutonElt.style.display = 'none';
form.style.display = 'inline-block';
zoneForm.appendChild(form);
} else {
document.getElementById("nouveauLien").style.display = "none";
}
});
boutonValider.addEventListener("click", function() {
var message = document.createElement("p");
message.textContent = "link already added! ";
var message2 = "Try again";
var newObject = {
titre: document.getElementsByName('titre').value,
url: document.getElementsByName('url').value,
auteur: document.getElementsByName('auteur').value
};
listeLiens.push(newObject);
if (boutonValider) {
boutonElt.style.display = 'none';
document.getElementById("nouveauLien").style.display = "none";
return message;
} else {
return message2;
}
});
document.getElementById("contenu").appendChild(zoneForm);
document.getElementById("contenu").appendChild(dlElt);
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
background-color: #eee;
margin-left: 30px;
margin-right: 30px;
}
span {
font-weight: normal;
font-size: 80%;
}
.lien {
background: white;
padding: 10px;
margin-bottom: 10px;
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/liensweb.css">
<title>Activity 2</title>
</head>
<body>
<h1>Activity 2</h1>
<!-- New elements into this tag -->
<div id="contenu">
</div>
<script src="../js/liensweb.js"></script>
</body>
</html>
非常感谢您!
答案 0 :(得分:1)
我已经纠正了您代码中的几个错误,以下是有效代码,
var listeLiens = [{
titre: "So Foot",
url: "http://sofoot.com",
auteur: "yann.usaille"
},
{
titre: "Guide d'autodéfense numérique",
url: "http://guide.boum.org",
auteur: "paulochon"
},
{
titre: "L'encyclopédie en ligne Wikipedia",
url: "http://Wikipedia.org",
auteur: "annie.zette"
},
];
var dlElt = document.createElement("dl");
listeLiens.forEach(function(mot) {
appendObjToList(mot);
});
function appendObjToList(mot) {
var dtElt = document.createElement("dt");
var titreElt = document.createElement("a");
titreElt.textContent = mot.titre;
titreElt.href = mot.url;
var urlElt = document.createElement("span");
urlElt.textContent = mot.url;
var auteurElt = document.createElement("p");
auteurElt.textContent = "Ajouté par " + mot.auteur;
//STYLES
dtElt.style.marginBottom = "10px";
dtElt.style.backgroundColor = "#fff";
dtElt.style.padding = "15px";
titreElt.style.color = "#428bca";
titreElt.style.fontSize = "22px";
titreElt.style.textDecoration = "none";
titreElt.style.fontWeight = "bold";
urlElt.style.marginLeft = "6px";
urlElt.style.fontSize = "16px";
auteurElt.style.paddingTop = "5px";
auteurElt.style.margin = "0px";
dlElt.appendChild(dtElt);
dtElt.appendChild(titreElt);
dtElt.appendChild(urlElt);
dtElt.appendChild(auteurElt);
}
//form and add new links function
var zoneForm = document.createElement("div");
var boutonElt = document.createElement("button");
boutonElt.textContent = "Ajouter un lien";
boutonElt.style.borderRadius = "5px";
boutonElt.style.padding = "3px";
var form = document.createElement("form");
form.id = "nouveauLien";
form.style.width = "100%";
var auteur = document.createElement("input");
auteur.placeholder = "Enter link name";
auteur.id = "auteur";
auteur.setAttribute('type', "text");
auteur.setAttribute('name', "auteur");
var titre = document.createElement("input");
titre.placeholder = "Enter title name";
titre.style.marginLeft = "40px";
titre.style.width = "18%";
titre.id = "titre";
titre.setAttribute('type', "text");
titre.setAttribute('name', "titre");
var url = document.createElement("input");
url.placeholder = "Enter link address";
url.style.marginLeft = "40px";
url.style.width = "23%";
url.setAttribute('type', "text");
url.setAttribute('name', "url");
var boutonValider = document.createElement("input");
boutonValider.style.marginLeft = "40px";
boutonValider.style.borderRadius = "5px";
boutonValider.style.width = "7%";
boutonValider.style.padding = "3px";
boutonValider.setAttribute('type', "button");
boutonValider.setAttribute('value', "Ajouter");
form.appendChild(auteur);
form.appendChild(titre);
form.appendChild(url);
form.appendChild(boutonValider);
zoneForm.appendChild(boutonElt);
boutonElt.addEventListener("click", function() {
if (boutonElt) {
boutonElt.style.display = 'none';
form.style.display = 'inline-block';
zoneForm.appendChild(form);
} else {
document.getElementById("nouveauLien").style.display = "none";
}
});
boutonValider.addEventListener("click", function() {
var message = document.createElement("p");
message.textContent = "link already added! ";
var message2 = "Try again";
var newObject = {
titre: document.getElementById('titre').value,
url: document.getElementsByName('url')[0].value,
auteur: document.getElementById('auteur').value
};
listeLiens.push(newObject);
appendObjToList(newObject);
if (boutonValider) {
form.style.display = 'none';
boutonElt.style.display = 'block';
document.getElementById("nouveauLien").style.display = "none";
return message;
} else {
return message2;
}
});
document.getElementById("contenu").appendChild(zoneForm);
document.getElementById("contenu").appendChild(dlElt);
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
background-color: #eee;
margin-left: 30px;
margin-right: 30px;
}
span {
font-weight: normal;
font-size: 80%;
}
.lien {
background: white;
padding: 10px;
margin-bottom: 10px;
}
<h1>Activity 2</h1>
<!-- New elements into this tag -->
<div id="contenu">
</div>
关于为什么它不能更早地起作用,这是错误,
最初,在页面加载时,您在DOM中填充了3个列表对象,但是在用户添加了另外一个对象之后,并没有在DOM中对其进行更新,而是仅在列表对象中进行了更新。
该表单的显示/隐藏操作不正确。隐藏容器将隐藏其所有子容器,反之亦然。
document.getElementById返回一个元素,而document.getElementsByName返回一个元素数组,您可以阅读文档以获取有关类似功能的更多信息。
您已将boutonValider设置为“提交”类型,这将尝试将表单发布为空url,并在每次单击该按钮时重新加载页面,如果您选择“重新处理javascript中的所有内容。