You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+SQLite3实现游戏收藏时点击按钮页面自动刷新问题排查

游戏收藏列表页面自动刷新问题的可能原因
  • 按钮未指定type="button"
    浏览器对未显式设置类型的按钮,默认会识别为submit类型。哪怕按钮不在<form>标签内,部分浏览器仍会触发类表单提交的页面刷新行为。检查按钮标签,确保显式设置type="button",示例:

    <button type="button" id="addBtn">添加游戏</button>
    
  • event.preventDefault()放置位置错误
    如果把event.preventDefault()放在fetch的异步回调(如.then()或async/await的后续代码)里,此时事件的默认行为已经触发,无法再阻止。必须将event.preventDefault()放在事件处理函数的最开头,在任何异步操作执行前调用,示例:

    document.getElementById('addBtn').addEventListener('click', async (e) => {
      e.preventDefault(); // 放在函数最前端
      // 后续fetch请求逻辑
      const response = await fetch('/api/add-game', {
        method: 'POST',
        // ...其他请求配置
      });
    });
    
  • 后端接口返回重定向响应
    如果后端在处理完INSERT/DELETE操作后,返回了3xx类的重定向状态码(如302),fetch会默认跟随重定向。若重定向目标是当前页面,就会触发页面刷新。检查后端接口的响应逻辑,确保返回2xx状态码的JSON响应,示例:

    // 后端示例(Node.js+Express)
    app.post('/api/add-game', (req, res) => {
      db.run('INSERT INTO games ...', (err) => {
        if (err) {
          return res.status(500).json({ success: false, message: err.message });
        }
        res.status(200).json({ success: true }); // 返回JSON而非重定向
      });
    });
    
  • 事件监听被重复绑定
    如果页面存在动态渲染逻辑(如添加新游戏后重新渲染按钮),可能导致同一个按钮被多次绑定点击事件。若某一次绑定的处理函数未调用event.preventDefault(),就会触发页面刷新。可通过绑定前移除旧监听,或使用事件委托避免重复绑定,示例:

    // 移除旧监听再绑定
    const addBtn = document.getElementById('addBtn');
    addBtn.removeEventListener('click', handleAdd);
    addBtn.addEventListener('click', handleAdd);
    
    // 或使用事件委托(绑定到父元素)
    document.getElementById('gameList').addEventListener('click', (e) => {
      if (e.target.matches('.add-btn')) {
        e.preventDefault();
        // 执行添加逻辑
      }
    });
    

内容的提问来源于stack exchange,提问作者LOUDO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:38:10