前端+后端实现全选、反选+批量删除

一、批量删除

<!-- 添加 remove 类名 -->
                <input type="button" value="批量删除" class="remove">

我们先将批量删除的按钮命名为remove

然后我们写js

// 批量删除
$(".remove").on("click", function () {
    var ids = [];
    $(".check_item:checked").each(function () {
        ids.push($(this).val());
    });
    
    // 检查是否有选中的项
    if (ids.length === 0) {
        alert("请至少选择一项");
        return;
    }

    // 提示用户确认
    if (confirm("确定删除选中的项吗?")) {
        $.ajax({
            url: "RemoveServlet", 
            type: "post",
            data: {
                ids: ids.join(',')
            },
            success: function (value) {
                alert(value);
                loadData(); 
                loadPage(); 
            },
            error: function () {
                alert("批量删除请求失败!");
            }
        });
    }
});
  1. 事件设置

    • 代码通过 jQuery 给具有 remove 类的元素绑定了一个点击事件。

    • 当用户点击"删除"按钮时,事件处理函数将会被触发

      $(".remove").on("click", function ()
      
  2. 收集选中的项

    • 使用 jQuery 查找所有被选中的复选框(即带有 check_item 类且选中状态的复选框)。

    • 提取这些复选框的值(通常是对应的 ID),并将其存储在数组 ids 中。

      var ids = []; 
      $(".check_item:checked").each(function () {
       ids.push($(this).val())
      })
      
  3. 检查是否选择了项

    • 如果 ids 数组的长度为 0,表示用户没有选择任何项,弹出提醒框并结束操作。

      if (ids.length === 0) { 
         alert("请至少选择一项"); 
         return; 
      }
      
  4. 确认删除操作

    • 使用 confirm 弹窗提示用户是否确认删除选中的项,用户必须选择"确定"才能继续执行后续操作。
  5. 发送 AJAX 请求

    • 如果用户确认删除,就使用 jQuery 的 $.ajax() 方法向服务器发送 HTTP POST 请求。

    • 请求的 URL 是 RemoveServlet,并通过 data 将被选中的项的 ID(以逗号分隔的字符串)发送到服务器。

      $.ajax({
         url: "RemoveServlet", 
         type: "post",
         data: {
            ids: ids.join(',')
       },
      
  6. 处理响应

    • 成功回调 :如果服务器成功处理删除请求,弹出服务器返回的消息,并调用 loadData()loadPage() 函数重新加载数据和更新分页。

      success: function (value) { 
          alert(value)
          loadData()
          loadPage()
      },
      
    • 错误回调 :如果请求失败,弹出错误提示。

      error: function () { 
          alert("批量删除请求失败!")
       }
      

接着我们写Servlet

package servelt;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import db.MysqlUtil;

@WebServlet("/RemoveServlet")
public class RemoveServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public RemoveServlet() {
        super();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/plain;charset=utf-8");

        String idString = request.getParameter("ids");
        if (idString == null || idString.isEmpty()) {
            response.getWriter().write("未提供有效的删除 ID 列表");
            return;
        }

        String[] ids = idString.split(",");
        StringBuilder sqlBuilder = new StringBuilder("DELETE FROM content WHERE id IN (");
        for (int i = 0; i < ids.length; i++) {
            if (i > 0) {
                sqlBuilder.append(",");
            }
            sqlBuilder.append(ids[i]);
        }
        sqlBuilder.append(")");
        int num = MysqlUtil.del(sqlBuilder.toString());
        String res = (num > 0) ? "删除成功" : "删除失败";
        response.getWriter().write(res);
    }
}

我们只需修改dopose方法

  1. 字符编码设置

    bash 复制代码
    request.setCharacterEncoding("utf-8"); 
    response.setContentType("text/plain;charset=utf-8");
    • 设置请求内容的字符编码为 UTF-8,确保能够正确处理中文等特殊字符。
    • 设置响应的内容类型为纯文本,并指定字符编码。
  2. 获取请求参数

    bash 复制代码
    String idString = request.getParameter("ids");
    • 从请求中获取名为 ids 的参数,这个参数应该包含待删除项的 ID,以逗号分隔的字符串形式。
  3. 参数有效性检查

    bash 复制代码
    if (idString == null || idString.isEmpty()) {
       response.getWriter().write("未提供有效的删除 ID 列表")
       return
    }
    • 检查 idString 是否为 null 或为空,若是则返回提示信息,防止后续执行无效的删除操作。
  4. 构建 SQL 删除语句

    bash 复制代码
    String[] ids = idString.split(",")
    StringBuilder sqlBuilder = new StringBuilder("DELETE FROM content WHERE id IN (")
    for (int i = 0; i < ids.length; i++) { 
        if (i > 0) { 
           sqlBuilder.append(",")
        } 
       sqlBuilder.append(ids[i])
     } 
    sqlBuilder.append(")");
    • idString 按逗号分割成 ID 数组,构建 SQL 删除语句使用 StringBuilder 动态拼接 ID。
  5. 执行删除操作

    bash 复制代码
    int num = MysqlUtil.del(sqlBuilder.toString());
    • 调用 MysqlUtil 中的 del 方法,执行构建的 SQL 删除语句,并返回影响的记录数。
  6. 返回结果

    bash 复制代码
    String res = (num > 0) ? "删除成功" : "删除失败";
     response.getWriter().write(res);
    • 根据 num 的值判断删除操作是否成功,并将相应的结果返回给客户端。

二、全选

bash 复制代码
// 全选
$(".check_all").on("change", function () {
    // 检查全选框的状态
    if ($(this).prop("checked")) {
        $(".check_item").prop("checked", true)
    } else {
        $(".check_item").prop("checked", false)
    }
});
  1. 事件绑定

    bash 复制代码
    $(".check_all").on("change", function ()
    • 使用 jQuery 为具备 check_all 类的复选框绑定 change 事件。这意味着每当该复选框的状态发生变化时,后续的函数将会被调用。
  2. 检查全选框的状态

    bash 复制代码
    if ($(this).prop("checked"))
    • 使用 $(this).prop("checked") 检查当前的全选复选框是否被选中。

    • this 指代的是触发事件的 check_all 复选框对象。

    • 使用 prop() 获取某个元素的属性值时,可以直接传入属性名,

    • 也可以通过 prop() 方法设置元素的属性值,例如:

      bash 复制代码
      $('#myCheckbox').prop('checked', true); // 将复选框设为选中状态
  3. 选择所有项

    bash 复制代码
    $(".check_item").prop("checked", true);
    • 如果全选框被选中(即 checkedtrue),则通过 jQuery 选择所有带有 check_item 类的复选框,并将它们的 checked 属性设置为 true,从而实现全选。
  4. 取消选择所有项

    bash 复制代码
    $(".check_item").prop("checked", false);
    • 如果全选框未被选中,则取消所有带有 check_item 类的复选框的选中状态,将它们的 checked 属性设置为 false

三、反选

bash 复制代码
//反选
$("tbody").on("click", ".check_item", function () {
    var allChecked = $(".check_item").length === $(".check_item:checked").length;
    $(".check_all").prop("checked", allChecked);
});
  1. 事件委托

    bash 复制代码
    $("tbody").on("click", ".check_item", function ()
    • 使用 jQuery 的事件委托方法,在 tbody 元素下监听 check_item 类复选框的点击事件。
    • 这种方法允许在动态生成的内容上使用事件处理器,而不需要为每个复选框单独绑定事件。
  2. 计算选中的复选框数量

    bash 复制代码
    var allChecked = $(".check_item").length === $(".check_item:checked").length;
    • 这里,通过 $(".check_item").length 获取所有带有 check_item 类的复选框的总数。
    • 通过 $(".check_item:checked").length 获取当前选中的 check_item 复选框的数量。
    • 这两个数量进行比较,得出 allChecked 变量,表示是否所有复选框都被选中。
  3. 更新全选复选框的状态

    bash 复制代码
    $(".check_all").prop("checked", allChecked);
    • 根据 allChecked 的值来设置全选复选框的 checked 属性。
    • 如果 allCheckedtrue,则全选复选框被设置为选中;如果为 false,则全选复选框取消选中。

OK,以上就可以实现了

相关推荐
鸡鸭扣1 小时前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
天宇&嘘月2 小时前
web第三次作业
前端·javascript·css
小王不会写code3 小时前
axios
前端·javascript·axios
发呆的薇薇°4 小时前
vue3 配置@根路径
前端·vue.js
luckyext4 小时前
HBuilderX中,VUE生成随机数字,vue调用随机数函数
前端·javascript·vue.js·微信小程序·小程序
小小码农(找工作版)4 小时前
JavaScript 前端面试 4(作用域链、this)
前端·javascript·面试
前端没钱4 小时前
前端需要学习 Docker 吗?
前端·学习·docker
前端郭德纲5 小时前
前端自动化部署的极简方案
运维·前端·自动化
海绵宝宝_5 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
码农土豆5 小时前
chrome V3插件开发,调用 chrome.action.setIcon,提示路径找不到
前端·chrome