javascript - onClick 在第一次单击时不起作用
问题描述
我试图让一个button
元素在“关注”和“取消关注”之间切换其文本,但为什么 Javascript 在第一次单击按钮时没有反应?
HTML:
<form method="post">
<button class="follow" onclick="this.innerHTML = follow_test(this.innerHTML)">
Follow
</button>
</form>
JavaScript:
function follow_test(string) {
if (string === 'Follow') { return ('Unfollow'); } else { return('Follow'); }
}
解决方案
正如@Slaks 指出的那样,原因是按钮文本中的空格导致 else 语句运行,因为" string "
不严格等于( === ) to "string"
。
您可以只使用忽略空格的innerText属性,而不是像这样的innerHTML属性:
/* JavaScript */
var btn = document.querySelector("button");
function follow_test(string) {
let text = string.target;
if (text.innerText === "Follow") {
text.innerText = "Unfollow";
} else {
text.innerText = "Follow";
}
}
btn.addEventListener("click", follow_test);
<!-- HTML -->
<form method="post">
<button type="button" class="follow"> // added 'type="button"' to prevent page reload for example's sake
Follow
</button>
</form>
或者,如果您更喜欢使用innerHTML属性或想要使用textContent属性,您可以使用按钮字符串上的trim()方法来删除字符串前后的所有空格,如下所示:
/* JavaScript */
var btn = document.querySelector("button");
function follow_test(string) {
let text = string.target;
if ((text.innerHTML).trim() === "Follow") {
text.innerHTML = "Unfollow";
} else {
text.innerHTML = "Follow";
}
}
btn.addEventListener("click", follow_test);
<!-- HTML -->
<form method="post">
<button type="button" class="follow"> // added 'type="button"' to prevent page reload for example's sake
Follow
</button>
</form>
推荐阅读
- rabbitmq - 使用 Spring Cloud Stream 从 RabbitMQ / MQTT 消费
- rust - `pub` 是指 public-to-crate 还是 public-to-module?
- android - Android TV 中缺少应用栏的替代方案
- css - 旋转的文本未对齐
- flutter - 在 Flutter 中加载本地 Javascript 文件
- kubernetes - 无法从 kubectl get pod pod_name -o yaml 生成的 yaml 更新 Kubernetes pod
- configuration - 使用 Hyperledger Caliper 创建基准测试的困难
- python - 获取python中已安装程序的路径
- python - 使用外部浏览器身份验证器的雪花 Python 连接
- html - 如何将国家代码列表及其标志添加到 html 代码