微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

节点JS中页面重新加载后刷新复选框值

如何解决节点JS中页面重新加载后刷新复选框值

“我正在使用 Node 作为后端创建 Todo 列表。添加每个新项目后,还会在它们前面生成一个复选框,因此我可以应用“CSS 行通过”让用户知道该项目已完成或未完成使用。但是当我添加一个项目时,页面刷新并且该复选框未选中,因为我没有将该值存储在任何地方。您能告诉我如何在后端存储该复选框的值吗?

HTML -

<div class="Box" >  
    <% for (var i=0; i<newListItems.length; i++) { %>
    <div class="item">
        <input type="checkBox" id="checkBox">
        <p> <%= newListItems[i] %> </p>
    </div>
    <% } %>
    <form action="/" method="post" class="item">
        <input class="inputBox" type="text" name="newItem" placeholder="New item" autocomplete="off" required="required"> 
        <button type="submit" name="list" value=<%= listTitle%>> +</button>
    </form>
</div>

节点JS -

const items = [];

app.post("/",function(req,res){

let item = req.body.newItem;
    items.push(item);
    res.redirect("/");

});

解决方法

答案涉及大量代码,因此我将提供一组可以帮助您解决问题的步骤。

  1. 您需要更改数据方案。目前看起来您只是将字符串存储在一组项目中。您需要将其更改为对象数组。每个对象都应具有字段 taskdone。这样你就可以知道哪个任务完成了。

    app.post("/",function(req,res) {
        let item = req.body.newItem;
        items.push({ name: item,done: false });
        res.redirect("/");
    });
    
  2. 下一步将添加一个端点,该端点将数组项的 done 字段更改为 true

  3. 然后在前端,您需要编写一些 JS 代码,这些代码将向端点发送 HTTP 请求,将任务标记为完成。您需要为此使用 AJAX 调用,例如 NPM 包 axios

  4. 更改模板以反映对数据的更改。例如而不是 <%= newListItems[i] %><%= newListItems[i].name %> 并添加逻辑以根据 done 属性呈现选中的复选框。

值得一提的是,您不应该将数据存储在内存中,因为一旦该过程完成,您将丢失数据。用于学习目的是可以的,但在生产中,您应该使用数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。