Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无论是否选中复选框,都将true或false发送到数据库_Javascript_Jquery_Node.js_Checkbox_Nedb - Fatal编程技术网

Javascript 无论是否选中复选框,都将true或false发送到数据库

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

我和nedb有一个关于复选框的问题。我想发送真或假,如果复选框被选中或没有到数据库,我无法解决这个问题。我正在使用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

我使用的是
更改
功能,而不是
单击
功能。每次
单击
复选框上的
并选中该复选框时,它将显示控制台日志,并显示该
复选框的
数据-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函数。但我会记录所有控制台的数据,但如果任务完成或未完成,我不会设法更改状态