javascript - 尽管 if 语句为真,但仍执行 Javascript Else 语句
问题描述
我正在尝试使用 javascript 实现 3 状态 html 标签,当用户单击标签时,该标签在 3 个不同的 css 类名称之间进行迭代。我使用了一个简单的 if -> else if -> else if 语句在 3 个类状态之间切换,但由于某种原因,它总是执行第一个 true if 语句,然后执行下一个 else 语句,即使它已经命中首先是一个真实的 if 语句。
我有点困惑这是如何发生的,因为 else 语句应该在一个 true if 语句被命中后被跳过。
这是我的代码:
$(".goal-label").on('click', function() {
if ($(this).hasClass('active_goal')) {
alert('has active_goal');
$(this).removeClass('active_goal');
return $(this).addClass('complete_goal');
} else if ($(this).hasClass('complete_goal')) {
alert('has complete_goal');
$(this).removeClass('complete_goal');
return $(this).addClass('failed_goal');
} else if ($(this).hasClass('failed_goal')) {
$(this).removeClass('failed_goal');
return $(this).addClass('active_goal');
}
});
所以标签上的初始类是“active_goal”,当我点击它时,我看到警报“has active_goal”,然后我立即看到另一个警报“has complete_goal”,它位于 if 语句之后的 else if 语句中由具有“active_goal”类的标签触发。
我在这里做错了什么?非常感谢您的帮助。
解决方案
我仍然不知道是什么导致我的点击事件触发两次,但我发现return false
在点击函数的末尾添加 a 可以阻止它第二次发生,所以现在一切似乎都在工作。
推荐阅读
- python - 如何在绘图表上显示悬停信息?
- c++ - 如何在c ++ stl中获取在列表中推回的元素的地址?
- r - .如何在 R 中获取 Sarima 模型的残差时间序列?
- html - Flask WTForms SelectField 自定义属性 - 如何设置 SelectField 项的文本颜色
- node.js - 用户更改页面上的 socket.io 崩溃节点。zlib.js:499
- angular - 字体真棒图标未显示在 Angular Web 应用程序中
- python - 正确缩放机器学习的特征
- python - 使用“while”循环进行线性探测的哈希表
- go - Openpgp 使用 DSA 公钥进行加密
- email - 如何使用 procmail 和命令行工具对非英语电子邮件进行分类?