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

如何在JavaScript的if语句中集成SweetAlert2实现空提交提示?

问题描述

我正在用JavaScript编写待办列表,想实现输入框为空时按下回车键,用SweetAlert2弹出提示的功能。按照官方文档添加代码后无法正常运行,不清楚如何在if语句中正确编写逻辑,寻求帮助。

安装命令

npm install sweetalert2

index.html 代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>to-do App</title>
  </head>
  <body>
    <header>
      <form id="new-task-form">
        <input
          type="text"
          id="new-task-input"
          placeholder="What's your plans?"
        />
        <input type="submit" id="new-task-submit" value="ADD" />
      </form>
    </header>

    <main>
      <section class="task-list">
        <h2>Tasks</h2>

        <div id="tasks"></div>
      </section>
    </main>
    <script src="index.js"></script>
  </body>
</html>

main.js 代码

window.addEventListener("load", () => {
  const form = document.querySelector("#new-task-form");
  const input = document.querySelector("#new-task-input");
  const list_el = document.querySelector("#tasks");

  form.addEventListener("submit", (e) => {
    e.preventDefault();

    const task = input.value;
    const Swal = require('sweetalert2')   // Added this!

    if (!task) {
      Swal.fire("Whoop! Forgot to add something?");   // Added this!
      return;
    }

    const task_el = document.createElement("div");
    task_el.classList.add("task");

    const task_content_el = document.createElement("div");
    task_content_el.classList.add("content");

    task_el.appendChild(task_content_el);

    const task_input_el = document.createElement("input");
    task_input_el.classList.add("text");

    task_input_el.type = "text";

    task_input_el.value = task;
    task_input_el.setAttribute("readonly", "readonly");

    task_content_el.appendChild(task_input_el);

    const task_actions_el = document.createElement("div");
    task_actions_el.classList.add("actions");

    const task_edit_el = document.createElement("button");
    task_edit_el.classList.add("edit");

    const task_delete_el = document.createElement("button");
    task_delete_el.classList.add("delete");
    task_delete_el.innerHTML = "Delete";

    task_actions_el.appendChild(task_edit_el);
    task_actions_el.appendChild(task_delete_el);

    task_el.appendChild(task_actions_el);

    list_el.appendChild(task_el);

    input.value = "";

    task_edit_el.addEventListener("click", () => {
      if (task_edit_el.innerText.toLowerCase() === "edit") {
        task_input_el.removeAttribute("readonly");
        task_input_el.focus();
        task_edit_el.innerText = "Save";
      } else {
        task_input_el.setAttribute("readonly", "readyonly");
        task_edit_el.innerText = "Edit";
      }
    });

    task_delete_el.addEventListener("click", () => {
      list_el.removeChild(task_el);
    });
  });
});

问题原因及修复方案

你的代码存在三个核心问题,按以下步骤修改即可解决:

1. 替换require为浏览器兼容的引入方式

require是Node.js的模块语法,浏览器环境不支持。直接在index.html的</body>前添加SweetAlert2的CDN链接,全局即可使用Swal对象:

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

同时删除main.js中const Swal = require('sweetalert2')这一行。

2. 完善空值判断逻辑

原代码仅判断!task,但用户输入全空格时会绕过判断。修改输入值处理逻辑,先去除首尾空格:

const task = input.value.trim();

3. 修复编辑功能的拼写错误

编辑按钮逻辑中,setAttribute("readonly", "readyonly")的属性值拼写错误,应改为"readonly",否则编辑后无法锁定输入框。

修改后的核心代码片段

form.addEventListener("submit", (e) => {
  e.preventDefault();

  const task = input.value.trim();

  if (!task) {
    Swal.fire("提示", "Whoop! Forgot to add something?", "warning");
    return;
  }

  // 后续代码保持不变...

  task_edit_el.addEventListener("click", () => {
    if (task_edit_el.innerText.toLowerCase() === "edit") {
      task_input_el.removeAttribute("readonly");
      task_input_el.focus();
      task_edit_el.innerText = "Save";
    } else {
      task_input_el.setAttribute("readonly", "readonly");
      task_edit_el.innerText = "Edit";
    }
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:45:39