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

yizhihongxing

要实现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日

相关文章

  • 浅谈JVM中的JOL

    下面是关于“浅谈JVM中的JOL”的完整攻略。 一、JVM与内存模型 1.1 JVM的组成 JVM由类加载器、运行时数据区、执行引擎、本地方法接口和本地化支持等多个组成部分构成。其中,内存模型(运行时数据区)承载了程序的执行和运行过程,是JVM最为重要的组成部分。 1.2 内存模型的划分 JVM的内存模型被划分为若干个不同的区域,主要包括堆内存、非堆内存(包…

    Java 2023年5月26日
    00
  • Java方法引用原理实例解析

    Java方法引用原理实例解析 Java 8 中引入了方法引用(Method reference)的概念,可以使用方法引用来简化 lambda 表达式的书写。方法引用是指在 lambda 表达式中直接调用一个已经存在的函数或者对象方法,从而可以简化代码,提升程序的可读性和可维护性。 方法引用的语法 方法引用的语法如下: 对象名::方法名 类名::静态方法名 类…

    Java 2023年5月26日
    00
  • 类加载器有哪些种类?

    以下是关于类加载器种类的详细讲解: 类加载器有哪些种类? Java 中的类加载器可以分为几种: 启动类加载器(BootstrapLoader):负责加载 Java 的核心类库,如 rt.jar 等。 扩展类加载器(Extension ClassLoader):负责加载 Java 的扩展类库,如 jre/lib/ext 目录下的 jar 包。 应用程序类加载器…

    Java 2023年5月12日
    00
  • 如何使用JDBC实现工具类抽取

    使用JDBC实现工具类抽取需要遵循以下一般步骤: 加载JDBC驱动 创建数据库连接 创建Statement/PreparedStatment对象 执行SQL语句 处理结果集 释放资源 下面通过两个示例说明具体操作。 示例1:查询数据库 public class JdbcUtil { private static String url = "jdbc…

    Java 2023年5月26日
    00
  • JSP开发入门(四)–JSP的内部对象

    JSP(JavaServer Pages)是一种动态网页开发技术,通过将静态HTML页面和动态Java代码相结合,实现网页的动态化。在JSP的开发过程中,常会用到JSP的内部对象。本文将详细讲解JSP的内部对象。 JSP的内部对象 JSP有9个内部对象,分别是:request、response、out、session、application、page、exc…

    Java 2023年6月15日
    00
  • 使用Java的Spring框架编写第一个程序Hellow world

    使用Java的Spring框架编写第一个程序Hello world的完整攻略如下: 1. 准备工作 在开始编写Spring程序之前,我们需要做一些准备工作。 1.1 安装JDK和Maven 在开发Spring程序之前,需要安装JDK和Maven。 1.1.1 安装JDK 首先,我们需要安装JDK。到Oracle官网上下载安装包,安装完成后配置环境变量。 1.…

    Java 2023年5月19日
    00
  • java.lang.OutOfMemoryError: Metaspace异常解决的方法

    Java.lang.OutOfMemoryError: Metaspace异常解决的方法 当我们在开发Java应用程序时,可能会遇到Metaspace异常。这个异常表示应用程序的metaspace(元空间)达到了其最大值,导致应用程序无法继续进行下去。这种情况下,我们需要采取一些措施来解决这个问题。 什么是Metaspace(元空间) Metaspace是一…

    Java 2023年5月27日
    00
  • Spring MVC+FastJson+hibernate-validator整合的完整实例教程

    下面我将详细讲解Spring MVC+FastJson+hibernate-validator整合的完整实例教程。 一、概述 Spring MVC是一种用于Web开发的基于Java的MVC框架,可以方便地搭建Web应用。FastJson是阿里巴巴的一款开源的JSON处理库,相对于其他JSON处理库,FastJson有着更快的速度和更好的压缩率。hiberna…

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