jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码

要实现jQuery EasyUI datagrid在翻页以后仍能记录被选中行所对应数据的功能,我们可以通过以下步骤实现:

步骤一:记录选中行的数据

使用EasyUI datagrid中提供的onSelect和onUnselect事件,分别在用户选中和取消选中某一行的时候,记录该行所对应的数据,并将数据存储在一个数组中。具体代码如下:

var selectedRows = [];  // 存储被选中行数据的数组

// datagrid的onSelect事件
function onSelect(index, row){
    selectedRows.push(row);  // 将选中行数据添加到数组中
}

// datagrid的onUnselect事件
function onUnselect(index, row){
    // 在数组中移除取消选中行的数据(使用jQuery的grep函数)
    selectedRows = $.grep(selectedRows, function(n,i){
        return n.id !== row.id;
    });
}

以上代码中,我们通过定义一个selectedRows的全局数组来记录所有被选中的行数据。在datagrid的onSelect事件中,每次选中某一个行时就将该行所对应的数据添加到selectedRows数组中,而在onUnselect事件中,则是将该行所对应的数据从数组中移除。

步骤二:自定义分页插件

由于默认分页控件翻页时会重新加载页面,因此我们需要自定义分页插件,在翻页时不刷新页面,以保持记录选中行的数据的完整性。具体代码如下:

// 自定义分页控件(继承于EasyUI的pagination)
$.extend($.fn.pagination.defaults, {
    onSelectPage: function(pageNumber, pageSize){
        // 获取当前datagrid的数据
        var options = $(this).datagrid('options');
        var queryParams = options.queryParams;

        // 修改分页信息
        queryParams.page = pageNumber;
        queryParams.rows = pageSize;
        options.pageNumber = pageNumber;
        options.pageSize = pageSize;

        // 重新加载datagrid数据
        $(this).datagrid('loadData', queryParams);

        // 循环设置选中的行(使用jQuery的each函数)
        $.each(selectedRows, function(i, row){
            var index = $(this).datagrid('getRowIndex', row);
            $(this).datagrid('selectRow', index);
        });
    }
});

以上代码中,我们重写了EasyUI的pagination控件的onSelectPage事件。在该事件中,我们首先获取当前datagrid的数据,并修改分页信息(pageNumber和pageSize),然后重新加载datagrid的数据。

最后,我们使用jQuery的each函数遍历selectedRows数组中的每一个元素,通过datagrid的getRowIndex函数获取该元素对应的行在datagrid中的索引,然后使用datagrid的selectRow函数设置该行被选中。

示例代码一

<!-- HTML代码 -->
<table id="mygrid"></table>
<div id="mypaginator"></div>
// JS代码
$(document).ready(function(){
    // 初始化datagrid
    $('#mygrid').datagrid({
        url: 'get_data.php',
        pagination: true,
        columns: [[
            {field:'id', title:'ID'},
            {field:'name', title:'名称'}
        ]],
        onSelect: function(index, row){  // 修改为onSelect事件
            selectedRows.push(row);
        },
        onUnselect: function(index, row){  // 修改为onUnselect事件
            selectedRows = $.grep(selectedRows, function(n,i){
                return n.id !== row.id;
            });
        }
    });

    // 初始化自定义分页插件
    $('#mypaginator').pagination({
        total: 100,
        pageSize: 10,
        onSelectPage: function(pageNumber, pageSize){
            var options = $('#mygrid').datagrid('options');
            var queryParams = options.queryParams;
            queryParams.page = pageNumber;
            queryParams.rows = pageSize;
            options.pageNumber = pageNumber;
            options.pageSize = pageSize;
            $('#mygrid').datagrid('loadData', queryParams);
            $.each(selectedRows, function(i, row){
                var index = $('#mygrid').datagrid('getRowIndex', row);
                $('#mygrid').datagrid('selectRow', index);
            });
        }
    });
});

示例代码二

<!-- HTML代码 -->
<table id="mygrid"></table>
// JS代码
$(document).ready(function(){
    // 初始化datagrid(不需要分页控件)
    $('#mygrid').datagrid({
        url: 'get_data.php',
        pagination: false,
        columns: [[
            {field:'id', title:'ID'},
            {field:'name', title:'名称'}
        ]],
        onSelect: function(index, row){  // 修改为onSelect事件
            selectedRows.push(row);
        },
        onUnselect: function(index, row){  // 修改为onUnselect事件
            selectedRows = $.grep(selectedRows, function(n,i){
                return n.id !== row.id;
            });
        }
    });

    // 添加翻页控件并绑定事件
    $('#prevbtn').click(function(){
        var pager = $('#mygrid').datagrid('getPager');
        var options = pager.data('pagination').options;

        if(options.pageNumber > 1){
            options.pageNumber -= 1;  // 修改pageNumber属性
            $(pager).pagination('select', options.pageNumber);  // 触发onSelectPage事件
        }
    });

    $('#nextbtn').click(function(){
        var pager = $('#mygrid').datagrid('getPager');
        var options = pager.data('pagination').options;
        var total = options.total;
        var pageSize = options.pageSize;
        var maxPage = Math.ceil(total / pageSize);

        if(options.pageNumber < maxPage){
            options.pageNumber += 1;  // 修改pageNumber属性
            $(pager).pagination('select', options.pageNumber);  // 触发onSelectPage事件
        }
    });

    // 自定义分页插件
    $('#mygrid').datagrid('getPager').pagination({
        total: 100,
        pageSize: 10,
        onSelectPage: function(pageNumber, pageSize){
            var options = $('#mygrid').datagrid('options');
            var queryParams = options.queryParams;
            queryParams.page = pageNumber;
            queryParams.rows = pageSize;
            options.pageNumber = pageNumber;
            options.pageSize = pageSize;
            $('#mygrid').datagrid('loadData', queryParams);
            $.each(selectedRows, function(i, row){
                var index = $('#mygrid').datagrid('getRowIndex', row);
                $('#mygrid').datagrid('selectRow', index);
            });
        }
    });
});

以上两个示例代码分别实现了自定义翻页插件和使用按钮进行翻页的功能。在实际使用过程中,可以根据具体需求进行适当修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java BigDecimal除法精度和格式化输出方式

    下面为你详细讲解Java BigDecimal除法精度和格式化输出方式的完整攻略。 BigDecimal的除法精度 在使用BigDecimal进行除法运算时,需要确保除数不为0,并且设置正确的精度,否则将会导致运算结果不准确。下面是两个示例说明。 示例1 假设有两个数a=1.23456789和b=2,我们需要将a除以b并保留4位小数。代码如下: BigDec…

    Java 2023年5月26日
    00
  • Java任务定时执行器案例的实现

    下面我来详细讲解“Java任务定时执行器案例的实现”的完整攻略。 什么是Java任务定时执行器? 在Java中,我们经常需要定时执行一些任务,比如定时备份数据库、定时发送邮件等。而Java任务定时执行器就是用来进行这些定时任务的,它可以在指定的时间间隔内执行指定的任务。 Java任务定时执行器的实现方式 Java任务定时执行器有很多的实现方式,比如Timer…

    Java 2023年5月19日
    00
  • Easyui 关闭jquery-easui tab标签页前触发事件的解决方法

    如果你使用 EasyUI 来构建 Web 应用程序,你或许会遇到这样的情况:在关闭 tab 标签页前需要做一些操作,例如弹出对话框进行确认、保存数据等。那么如何实现 在关闭 EasyUI 的 Tab 标签页前触发事件呢?以下是完整的攻略步骤: 1. 绑定 onBeforeClose 事件 在使用 EasyUI Tabs 的时候,我们可以通过绑定 onBefo…

    Java 2023年6月15日
    00
  • Java中Stream流去除List重复元素的方法

    首先要说明一下,Java中的Stream流是Java8中新增的一种函数式操作流程,主要用来对集合进行函数式操作,它可以对集合进行一些链式操作,比如筛选、分组、排序、去重等。 List去重,在Java8中,可以借助Stream流,具体步骤如下: 使用Stream.builder()来构造一个Stream.Builder对象; 通过builder对象调用add方…

    Java 2023年5月31日
    00
  • Java实战项目 图书管理系统

    Java实战项目 图书管理系统攻略 介绍 Java实战项目 图书管理系统是一个基于Java语言的应用程序,用于管理图书馆内的书籍信息。这个项目涉及到了Java SE中的很多技术,例如Swing界面设计,JDBC数据库操作等。在这个项目中,我们将会实现以下功能: 图书的增加、查询、修改和删除 借阅的登记、查询、延期和归还 管理员和读者的登录操作 实现步骤 1.…

    Java 2023年5月23日
    00
  • Springboot源码 TargetSource解析

    Springboot源码 TargetSource解析 概述 在Spring框架中,AOP的核心就是AOP代理,而AOP代理的核心就是代理对象,而代理对象有可能是动态生成的,也有可能是预先存在的,在Spring框架中,预先存在的代理对象称为静态代理对象,动态生成的代理对象则使用CGLIB和JDK动态代理技术来实现,这里我们主要介绍CGLIB动态代理实现的过程…

    Java 2023年5月30日
    00
  • Springcloud+Mybatis使用多数据源的四种方式(小结)

    当我们使用SpringCloud和Mybatis时,有时需要使用多数据源来访问不同的数据库。下面介绍四种实现方式。 方式一:使用Mybatis-Plus Mybatis-Plus 是一个 MyBatis 的增强工具,提供了许多方便的功能,其中就包括多数据源的支持。 引入 mybatis-plus-boot-starter 依赖 xml <depende…

    Java 2023年5月20日
    00
  • Java中Object用法详解

    Java中Object用法详解 什么是Object Object是Java中所有类的基类,它包含了通用的属性和方法,所有Java类都继承自Object类。因此,Object是Java中最基本、最通用的一种类型。 public class MyClass { // … } 上面的代码中,虽然没有显式地继承Object类,但MyClass类默认继承了Obje…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部