【发布时间】:2021-04-26 21:56:33
【问题描述】:
我正在尝试使用 JavaScript 在单击时将按钮从标签“连接”切换到标签“忘记”,然后在再次单击时将按钮切换回“连接”。
我的代码没有像我期望的那样切换按钮。该代码位于 ASP.NET Core MVC 应用程序的视图模板 (.cshtml) 文件中。我也愿意接受使用 JQuery 来实现我的目标的答案。
HTML:
<button type="button" class="buttonOne">Connect</button>
代码:
const $ = document.querySelector.bind(document);
$(".buttonOne").addEventListener("click", (e) => {
let clicked = false;
if (clicked) {
e.target.innerText = "Forget";
} else {
e.target.innerText = "Connect";
}
clicked = !clicked;
});
$(".buttonTwo").addEventListener("click", (e) => {
let clicked = false;
if (clicked) {
e.target.innerText = "Forget";
} else {
e.target.innerText = "Connect";
}
clicked = !clicked;
});
$(".buttonThree").addEventListener("click", (e) => {
let clicked = false;
if (clicked) {
e.target.innerText = "Forget";
} else {
e.target.innerText = "Connect";
}
clicked = !clicked;
});
更新
此代码将按钮从“连接”更改为“忘记”,但由于某种原因您需要单击该按钮两次,如果再次单击该按钮,则按钮状态不会返回“连接”。还需要“onclick” HTML 属性,不知道为什么。
<button type="button" class="buttonOne" onclick="myFunction2();">Connect</button>
<script>
function myFunction2(){
const $ = document.querySelector.bind(document);
$(".buttonOne").addEventListener("click", (e) => {
let clicked = false;
if (clicked)
{
e.target.innerText = "Connect";
} else {
e.target.innerText = "Forget";
}
clicked = !clicked;
});
$(".buttonTwo").addEventListener("click", (e) =>
{
let clicked = false;
if (clicked)
{
e.target.innerText = "Forget";
} else {
e.target.innerText = "Connect";
}
clicked = !clicked;
});
$(".buttonThree").addEventListener("click", (e) => {
let clicked = false;
if (clicked)
{
e.target.innerText = "Forget";
}else {
e.target.innerText = "Connect";
}
clicked = !clicked;
});
}
</script>
更新 2
感谢@John Ronald 的评论(@mplungjan 的回答)我编写了以下有效的代码:
const $ = document.querySelector.bind(document);
let clickedOne = false;
let clickedTwo = false;
let clickedThree = false;
$(".buttonOne").addEventListener("click", (e) => {
// When method executes it means the button has been clicked
if (clickedOne) {
// When unclicked change button label to "Connect"
e.target.innerText = "Connect";
} else {
// When first clicked change button label to "Forget"
e.target.innerText = "Forget";
}
clickedOne = !clickedOne;
});
$(".buttonTwo").addEventListener("click", (e) => {
if (clickedTwo) {
e.target.innerText = "Connect";
} else {
e.target.innerText = "Forget";
}
clickedTwo = !clickedTwo;
});
$(".buttonThree").addEventListener("click", (e) => {
if (clickedThree) {
e.target.innerText = "Connect";
} else {
e.target.innerText = "Forget";
}
clickedThree = !clickedThree;
});
<button class="buttonOne">Connect</button>
<button class="buttonTwo">Connect</button>
<button class="buttonThree">Connect</button>
更新 3
我的 HTML 文档中的按钮包含一个带有空 href 属性值 (<a href="">) 的锚元素,这导致按钮在单击时闪烁标签“忘记”,而不是按钮切换到“忘记”直到它再次被点击。这就是为什么在 Update 2 中使用 JavaScript 代码时,单击时按钮没有切换。
【问题讨论】:
-
将
$绑定为 jQuery 非常令人困惑。请点击编辑,然后点击[<>]并提供相关 RENDERED HTML、相关 CSS 和任何框架的 minimal reproducible example。您的预期结果并不明显let clicked = false;不是很有用 -
如果在onclick方法中设置了“clicked=false”,则永远为false。
-
@JohnRonald 怎么样?
clicked = !clicked翻转布尔值。 -
是的,你在方法结束时翻转它,这很有用。每次调用 onclick 方法时,它都会被重写为 false。而且它只是局部变量。您需要将其设置为全局变量。
标签: javascript c# asp.net-core asp.net-core-mvc