javascript - 无论我在下拉框中选择什么,只要我按 Enter,它只会给出相同的字体
问题描述
问题是什么?无论我选择“通过”、“失败”还是“边界线”,我都会不断获得绿色字体。我希望有人能帮我解决这个问题,这样每当我选择 Pass 时,我都会在列表中获得名称和绿色字体,Fail 会给我名称和红色字体,而 Borderline 会给我名称和橙色字体,谢谢!
<html>
<body>
<form id="form">
Enter Student Name <input type="text" id="name">
Grade <select id="gradism">
<option value="Pass">Pass</option>
<option value="Fail">Fail</option>
<option value="Borderline">Borderline</option>
</select>
<button type="button" id="enter" onclick="myFunction()">Enter</button>
</form>
<h1>Students</h1>
<ul id="list"></ul>
<script>
selected = document.getElementById("gradism").value
if (selected == "Pass") {
function myFunction() {
var text = "";
var userName = document.getElementById("name").value;
document.getElementById("list").style.color = "#00FF00";
var li = document.createElement("li");
var node = document.createTextNode(userName);
li.appendChild(node);
if (userName.trim().length > 0) {
document.getElementById("list").appendChild(li);
document.getElementById("form").reset()
}
}
}
else if (selected == "Fail") {
function myFunction() {
var text = "";
var userName = document.getElementById("name").value;
document.getElementById("list").style.color = "#FF0000";
var li = document.createElement("li");
var node = document.createTextNode(userName);
li.appendChild(node);
if (userName.trim().length > 0) {
document.getElementById("list").appendChild(li);
document.getElementById("form").reset()
}
}
}
else if (selected == "Borderline") {
function myFunction() {
var text = "";
var userName = document.getElementById("name").value;
document.getElementById("list").style.color = "#FFA500";
var li = document.createElement("li");
var node = document.createTextNode(userName);
li.appendChild(node);
if (userName.trim().length > 0) {
document.getElementById("list").appendChild(li);
document.getElementById("form").reset()
}
}
}
</script>
</body>
</html>```
解决方案
您的代码失败的原因是:当页面加载时,您的逻辑会被评估。立即您的条件运行和页面决定它将使用哪些功能。它永远不会改变,因为它在页面加载时都会评估一次
当您想要测试条件时,请在单个函数中进行,而不是为每个结果创建多个函数。在这种情况下,这也意味着我们不会测试下拉的值,直到函数运行。此外,由于您正在更改元素的样式,因此让我们使用类。更易于使用且更具可扩展性。我们可以简单地将下拉列表的值作为一个类直接传递给新元素li.classList.add(color.toLowerCase())
function myFunction() {
var text = "";
var userName = document.getElementById("name").value;
let color = document.getElementById("gradism").value
var li = document.createElement("li");
li.classList.add(color.toLowerCase())
var node = document.createTextNode(userName);
li.appendChild(node);
if (userName.trim().length > 0) {
document.getElementById("list").appendChild(li);
document.getElementById("form").reset()
}
}
.pass {
color: #00FF00;
}
.borderline {
color: #FFA500;
}
.fail {
color: #FF0000;
}
<form id="form">
Enter Student Name <input type="text" id="name"> Grade
<select id="gradism">
<option value="Pass">Pass</option>
<option value="Fail">Fail</option>
<option value="Borderline">Borderline</option>
</select>
<button type="button" id="enter" onclick="myFunction()">Enter</button>
</form>
<h1>Students</h1>
<ul id="list"></ul>