Javascript 无论是否选中复选框,都将true或false发送到数据库
我和nedb有一个关于复选框的问题。我想发送真或假,如果复选框被选中或没有到数据库,我无法解决这个问题。我正在使用node.js和nedb。请帮忙 客户端js事件侦听器:Javascript 无论是否选中复选框,都将true或false发送到数据库,javascript,jquery,node.js,checkbox,nedb,Javascript,Jquery,Node.js,Checkbox,Nedb,我和nedb有一个关于复选框的问题。我想发送真或假,如果复选框被选中或没有到数据库,我无法解决这个问题。我正在使用node.js和nedb。请帮忙 客户端js事件侦听器: var taskDone = document.querySelectorAll('.taskDone'); taskDone.forEach(btn => { btn.addEventListener('click', (e) => { var done = e.target.att
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
我使用的是更改
功能,而不是单击
功能。每次单击复选框上的并选中该复选框时,它将显示控制台日志,并显示该复选框的数据-i
d
要获取数据id,只需使用jQuery的.data
函数,并在数据-**
之后指定所需内容即可获取存储值
此外,不要在jQuery中使用胖箭头
-=>
函数。使用普通函数语句,这样您就可以通过使用$(this)
而不是指定每个类或id来访问内容
现场工作演示:
let taskDone=document.querySelectorAll('.taskDone')//用同一个类获取所有的chechbox。任务完成
forEach(函数(btn){//使用普通函数
btn.addEventListener('change',function(){
让id=$(this.data('id')//获取复选框的数据id
if($(this).is(':checked'){//检查单击的复选框是否选中
console.log(id+'已选中-正在更新neDB')//console.log
$.ajax({
网址:'http://localhost:3000/done/“+id,
键入:“PUT”,
数据:“isDone”
}).完成(功能(数据){
console.log(数据)
})
}否则{
console.log(“未检查”)
}
})
})
$(taskDone)
正在使用queryselectorall
方法返回节点列表-数组类型。您没有选择您单击的实际复选框!你也可以添加你的HTML吗?那么我应该怎么做呢?添加了html@AlwayShelling您是在复选框checked
上调用更新函数,还是在单击按钮时调用更新函数?这是一个onclick函数。但我会记录所有控制台的数据,但如果任务完成或未完成,我不会设法更改状态