javascript - 从按钮单击时放置和删除背景颜色
问题描述
我对这段代码有疑问,因为它有效。好吧,部分。我的想法是更改用户单击的按钮的背景颜色,但数据行属性仅增加一次,并且仅更改背景颜色一次。(它进入 else 并将数据行值从 0 更改为 1,但我的想法是进一步增加它的值,然后通过断定值是奇数还是偶数来删除或添加 bg-danger 类)。所有按钮(都具有垃圾箱类)最初都具有值为 0 和中性背景颜色的数据行属性。这段代码有什么问题?
$(".trashCan").click(function(){
let trashCan = $(this);
let trash = parseInt(trashCan.data('line'))+1;
trashCan.attr('data-line',trash);
if(trash%2==0){
trashCan.removeClass("bg-danger");
}
else {
trashCan.addClass("bg-danger");
}
});
解决方案
问题是因为您正在使用和data-line
混合访问属性。前者从 DOM 中读取,而后者从 jQuery 的内部缓存中读取。如果您使用其中之一获得值,则还需要使用相同的方法设置值。attr()
data()
在下面的示例中,我修改了data()
仅使用的逻辑,这在可能的情况下是首选。如果您绝对必须更新 DOM,那么您可以使用attr()
。
$(".trashCan").click(function() {
let trashCan = $(this);
let trash = parseInt(trashCan.data('line')) + 1;
trashCan.data('line', trash);
if (trash % 2 == 0) {
trashCan.removeClass("bg-danger");
} else {
trashCan.addClass("bg-danger");
}
});
.trashCan {
background-color: #CCC;
color: #000;
border-radius: 5px;
padding: 10px 30px;
border: 0;
}
.trashCan.bg-danger {
background-color: #C00;
color: #FFF
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="trashCan" data-line="0">Trash</button>
但是,值得注意的是,这种逻辑不是必需的。您的目标似乎只是在连续单击时切换类,在这种情况下,只需完全使用toggleClass()
和删除该data
属性:
$(".trashCan").click(function() {
$(this).toggleClass('bg-danger');
});
.trashCan {
background-color: #CCC;
color: #000;
border-radius: 5px;
padding: 10px 30px;
border: 0;
}
.trashCan.bg-danger {
background-color: #C00;
color: #FFF
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="trashCan">Trash</button>
推荐阅读
- php - 十月 CMS 包括类
- node.js - Sequelize.js 是否默认转义 SQL 注入的输入?
- php - 实现包装 Guzzle PHP 的服务客户端时的最佳实践
- file-io - Elixir:写入文件并创建父目录(如果它们不存在) - 在一行中
- java - 如何将对象的 ArrayList 发送到其他活动?
- command-line-interface - 我可以使用 Browserify CLI 将选项传递给 babel 预设吗?
- html - 将单选按钮与 HTML 中的标签对齐
- c# - Unity:PlayMode UnityTest 和 EditMode UnityTest 有什么区别?
- machine-learning - 异常值的准确预测
- prestashop - 如何在 Prestashop 1.6 中手动延迟加载图像?