【发布时间】:2020-12-11 15:47:50
【问题描述】:
我遇到了关于 nedb 复选框的问题。如果选中复选框,我想将 true 或 false 发送到数据库,我无法解决此问题。我正在使用 node.js 和 nedb。请帮忙!
客户端js事件监听器:
var taskDone = document.querySelectorAll('.taskDone');
taskDone.forEach(btn => {
btn.addEventListener('click', (e) => {
var done = e.target.attributes[1].value;
let id = e.target.getAttribute('data-id');
let isDone = document.querySelector(`input[data-id=${id}]`).value;
console.log(isDone + "isdone")
if ($(taskDone).is(':checked')) {
$('.text').addClass('line-through')
console.log("trues")
$.ajax({
url: 'http://localhost:3000/done/' + id,
type: 'PUT',
data: { isDone }
}).done(function (data) {
//location.reload()
console.log(data)
})
} else {
console.log('falses')
$('.text').removeClass('line-through')
}
})
})
更新函数到 nedb:
function taskIsDone (id, done) {
return new Promise((resolve, reject) => {
db.update({ _id: id }, { $set: done }, { returnUpdatedDocs: true }, (err, num, updateDocs) => {
if (err) {
reject(err)
} else {
resolve(updateDocs)
}
})
})
}
服务器:
app.put('/done/:_id', async(req, res) => {
try {
var id = req.params._id;
let done = {
title: req.body.isDone,
}
const updateToDo = await taskIsDone(id, done)
console.log(updateToDo + " Todo done");
res.json(updateToDo);
} catch (error) {
res.json({error: error.message});
}
})
html/ejs:
<% for ( var i = 0; i < row.length; i++) { %>
<div class="edit-container" >
<input type="text" name="editTask" value="<%=row[i].title %>" data-id="<%=row[i]._id %>">
<button name="<%= row[i]._id %>" class="edit" data-id="<%=row[i]._id %>">save edit</button>
</div>
<div>
<input type="checkbox" name="isDone" class="taskDone" data-id="<%=row[i]._id %>">
<span class="text"><%= row[i].title %></span>
<button class="delete" name="<%= row[i]._id %>">delete</button>
</div>
<br>
<% } %>
我真的需要一些帮助!谢谢
【问题讨论】:
-
$(taskDone)正在使用querSelectorAll方法,该方法返回一个节点列表 - 数组类型。您没有选择您点击的实际复选框! -
你也可以添加你的 HTML 吗?
-
那我应该怎么做呢?添加了 html @AlwaysHelping
-
您是在复选框
checked上调用该更新函数还是在单击按钮时调用该更新函数? -
这是一个点击功能。但我得到了所有控制台数据,但如果任务完成与否,我无法改变状态
标签: javascript jquery node.js checkbox nedb