javascript - 切换布尔数据属性仅适用于一次 Jquery
问题描述
我正在创建一个待办事项列表,每个待办事项的 HTML div 都包含一个data-completed="true"
属性。
当使用 Jquery 单击待办事项时,我试图来回切换完成的属性
它切换为false,但是当我再次单击时它不会切换回来。尽管 click 事件正在传递新值,但 flipCompleted 变量似乎卡在了 false 上。
$("body").on("click", ".todo", function() {
let id = $(this).data("id")
let completed = $(this).attr("data-completed")
// dbMethods.updateTodo(id, completed)
domMethods.updateTodo.call(this, completed)
event.stopPropagation()
})
updateTodo: function(completed) {
let flipCompleted = !completed
$(this).children('.todo-title').toggleClass("completed");
$(this).data("completed", flipCompleted);
}
HTML:
<div class="todo" data-id="5de7d31d753b914d6f714cab" data-completed="true">
<div class="todo-title"><h4>Go to shops</h4></div>
<button class="delete"><i class="fas fa-trash-alt" aria-hidden="true"></i></button>
</div>
我试过改变它,.attr()
两者.data()
都只能工作一次。
我不确定我做错了什么,所以任何帮助将不胜感激。
解决方案
通过修复代码中的不一致可能可以解决该问题。你有这个:
$("body").on("click", ".todo", function() {
...
// this bit of code right here:
let completed = $(this).attr("data-completed")
...
})
updateTodo: function(completed) {
...
$(this).data("completed", flipCompleted);
}
但是你想.data
在这两种情况下都使用 jQuery 函数
$("body").on("click", ".todo", function() {
...
// this bit of code right here:
let completed = $(this).data("completed")
...
})
推荐阅读
- java - Spring Boot + Spring MVC + Thymeleaf 自定义登录失败,在控制台中没有显示任何错误
- java - 如何裁剪或复制 Canvas 的某个区域?
- excel - 为什么我更换笔记本电脑时 VBA 代码返回错误?
- javascript - 有没有办法在 JS 中“从左侧”监听特定位置?
- reactjs - React 组件 Material UI withStyles:样式中的变量?
- javascript - 如何从 JSON 数组调用函数
- javascript - 如何通过(密码)确认来确认用户的操作?
- javascript - webpack 可以在多个动态导入中两次获取相同的包吗?
- python - python脚本中bash命令的动态变量
- java - 为什么需要 ==0,当我删除它时出现错误“操作符 && 未定义参数类型 int、布尔值”