javascript - 如何在使用 vanilla JS 的下一次单击时在单击事件中添加和删除类?
问题描述
当我第二次单击事件侦听器时,会根据条件添加新类,但不会删除和/或重置以前的类。
输入早于 1980 年的年份并查看结果。再次单击“开始”并输入比 1980 年新的年份(不要刷新页面),附加到新结果的类不会更改。
fakeEvent.addEventListener('click', function() {
let birthYear = prompt("What year were you born", "");
let currentYear = new Date().getFullYear();
let age = currentYear - birthYear;
if (age <= 40) {
result.innerHTML = `You entered ${age} years old.`;
result.classList.add('black');
} else {
result.innerHTML = `You entered ${age} years old.`;
result.classList.add('green');
}
})
.black { background: black; color: white; }
.green {background: green; color: yellow; }
h4 {
margin-top: 3rem;
}
<div class="container">
<button type="button" id="fakeEvent">Get Started</button>
<hr />
<div id="result"></div>
<h4>Enter a year older than 1980 and see the result. Click 'Get Started' again and enter a year newer than 1980 (don't refresh the page) and the class attached to the new result doesn't change.</h4>
</div>
解决方案
您可以在进行更改之前简单地清除 classList
result.classList.remove('black', 'green');
fakeEvent.addEventListener('click', function() {
let birthYear = prompt("What year were you born", "");
let currentYear = new Date().getFullYear();
let age = currentYear - birthYear;
result.classList.remove('black', 'green');
if (age <= 40) {
result.innerHTML = `You entered ${age} years old.`;
result.classList.add('black');
} else {
result.innerHTML = `You entered ${age} years old.`;
result.classList.add('green');
}
})
.black { background: black; color: white; }
.green {background: green; color: yellow; }
h4 {
margin-top: 3rem;
}
<div class="container">
<button type="button" id="fakeEvent">Get Started</button>
<hr />
<div id="result"></div>
<h4>Enter a year older than 1980 and see the result. Enter a year newer than 1980 and the class attached to the new result doesn't change.</h4>
</div>
推荐阅读
- neo4j - 无效的输入“r”:预期的“t/T”
- networking - 如何在外部公共 IP 地址上对连接到服务器的 POD 的源 IP 地址进行 NAT?
- swift - 在 Swift 中使用带有 CocoaPods 的静态库对于 Realm 失败
- objective-c - 访问其他项目中某个类的私有变量
- javascript - 如何从父组件调用子组件中的函数
- windows - 在 Windows 10 上移除 LAN 电缆时,NetBios 堆栈被清除
- javascript - React JS + PHP(Mysql) = "records.map 不是函数";
- ruby-on-rails - 如何使用 Rails 中的 minitest 在我的控制器中测试(例如)@project.save 的失败?
- python-3.x - ValueError:使用pickle时没有足够的值来解包
- java - 强制 spark 使用更多执行器,每个分区一个