javascript - 事件处理程序没有更改变量。
问题描述
我想通过单击锚链接来更改 javascript 变量,然后根据该变量显示不同的信息。在这里,我单击哪个锚点并不重要,在这两种情况下,innerHTML 都会返回说选择的数字是 1。我已经阅读了 javascript 中的垃圾收集,其中先前分配的变量值将被替换,这似乎是做这类事情的好方法。但除此之外,我遇到的第一个问题是变量似乎没有改变。对这个东西很陌生,非常感谢!
<html>
<head>
<style>
.selectOne {
font-size: 20px;
}
.selectTwo {
font-size: 20px;
}
.displayNumber {
font-size: 20px;
}
</style>
</head>
<body>
<a href="#" class="selectOne">Apply One</a>
<br>
<a href="#" class="selectTwo">Apply Two</a>
<div class="displayNumber">Number will display here.</div>
<script>
const selectOne = document.querySelector(".selectOne");
const selectTwo = document.querySelector(".selectTwo");
const displayNumber = document.querySelector(".displayNumber");
var number;
function applyNumberOne () {
number = "one";
}
selectOne.addEventListener("click", applyNumberOne);
function applyNumberTwo () {
number = "two";
}
selectTwo.addEventListener("click", applyNumberTwo);
function showNumber () {
if (number = "one") {
displayNumber.innerHTML = "<p>The number selected was one.</p>";
} else if (number = "two") {
displayNumber.innerHTML = "<p>The number selected was two.</p>";
}
}
selectOne.addEventListener("click", showNumber);
selectTwo.addEventListener("click", showNumber);
</script>
</body>
</html>
解决方案
在您的代码中:
number = "one"
是一个任务
它应该是:
number == "one"
比较变量number
值- 或者
number === "one"
更严格地比较type
变量的
但是,在您的代码中,您不需要进行比较
代码重构:
function showNumber () {
displayNumber.innerHTML = `<p>The number selected was ${number}.</p>`;
}
工作代码示例:
const selectOne = document.querySelector('.selectOne');
const selectTwo = document.querySelector('.selectTwo');
const displayNumber = document.querySelector('.displayNumber');
let number;
function applyNumberOne() {
number = 'one';
}
selectOne.addEventListener('click', applyNumberOne);
function applyNumberTwo() {
number = 'two';
}
selectTwo.addEventListener('click', applyNumberTwo);
function showNumber() {
displayNumber.innerHTML = `<p>The number selected was ${number}.</p>`;
}
selectOne.addEventListener('click', showNumber);
selectTwo.addEventListener('click', showNumber);
.selectOne {
font-size: 20px;
}
.selectTwo {
font-size: 20px;
}
.displayNumber {
font-size: 20px;
}
<a href="#" class="selectOne">Apply One</a>
<br>
<a href="#" class="selectTwo">Apply Two</a>
<div class="displayNumber">Number will display here.</div>
这是您的代码的新版本,但重构了 CSS 和 JavaScript:
const elems = document.querySelectorAll('.selectOne, .selectTwo');
const displayNumber = document.querySelector('.displayNumber');
const getNumberFrom = { selectOne: 'one', selectTwo: 'two' };
elems.forEach(el => el.addEventListener('click', e => displayNumber.innerHTML = `The number selected was ${getNumberFrom[e.target.className]}.`));
.selectOne,
.selectTwo,
.displayNumber {
font-size: 20px;
}
<a href="#" class="selectOne">Apply One</a>
<br>
<a href="#" class="selectTwo">Apply Two</a>
<div class="displayNumber">Number will display here.</div>
希望能帮助到你
推荐阅读
- javascript - 谷歌工作表+应用脚本+ HTML停止元素在谷歌工作表侧边栏中的onclick功能后清除
- node.js - 使用 heroku 和 bcryptjs 时出现内部服务器错误
- android - 任务“:app:compileFlutterBuildDebug”执行失败-flutter.gradle 行:1035
- python - 加载已保存模型的决策森林问题
- python - python中所有国家/地区的每月条形图
- reactjs - 您在 next.config.js 中将“模块:true”放在哪里?
- powershell - 在从控制面板卸载第三方应用程序期间,我收到此错误。您不能在空值表达式 PowerShell 上调用方法
- vue.js - 观看 Vue 3 全局变量的变化
- .net - .NET 5 控制台应用程序 - 处理 OAuth2 重定向 URL
- msbuild - 从非 CPP 项目访问 $(VCToolsInstallDir)