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日

相关文章

  • MyBatis入门介绍(超简单)

    让我来给您详细讲解“MyBatis入门介绍(超简单)”的完整攻略。 1. 什么是MyBatis MyBatis是一款优秀的持久层框架,它主要解决了传统的JDBC编程中,大量重复的sql语句以及防止sql注入等问题,在实际的开发过程中可以大大提高开发效率。 2. MyBatis的优势和特点 简单易学:MyBatis是一个简单易学且功能强大的持久层框架,用户只需…

    Java 2023年5月20日
    00
  • SpringMVC 数据校验方法(必看篇)

    以下是关于“SpringMVC 数据校验方法(必看篇)”的完整攻略,其中包含两个示例。 SpringMVC 数据校验方法 SpringMVC 数据校验是一种用于验证表单数据的机制。在本文中,我们将讲解SpringMVC 数据校验的实现原理及用法。 数据校验实现原理 SpringMVC 数据校验的实现原理是通过使用JSR-303规范中的注解来实现的。JSR-3…

    Java 2023年5月17日
    00
  • 如何利用JAVA正则表达式轻松替换JSON中的大字段

    下面是如何利用Java正则表达式轻松替换JSON中的大字段的完整攻略: 什么是正则表达式 在介绍如何利用Java正则表达式替换JSON大字段之前,先来简单介绍一下正则表达式。正则表达式是一种文本模式,可以用来匹配搜索文本中的字符串。Java正则表达式是指Java语言中可用的正则表达式。在Java中,正则表达式由 java.util.regex 包提供支持。 …

    Java 2023年5月26日
    00
  • java字符串求并集的方法

    针对这个问题,我会给出详细的解释和两个示例。 Java字符串求并集的方法 一、使用Java的Set集合 Java的Set集合是不重复的集合,很适合用来进行字符串的并集操作。具体的实现方式是创建两个Set集合,分别用来存储两个字符串的字符,然后将两个集合进行合并,最后输出合并后的结果即可。 下面是示例代码: import java.util.HashSet; …

    Java 2023年5月27日
    00
  • Java读取数据库表(二)

    Java读取数据库表(二) application.properties db.driver.name=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/easycrud?useUnicode=true&characterEncoding=utf8&serverTimezo…

    Java 2023年5月4日
    00
  • JavaScript实现留言板添加删除留言

    下面是“JavaScript实现留言板添加删除留言”的完整攻略: 1. 创建HTML页面结构 首先创建一个HTML文件,结构如下: <!DOCTYPE html> <html> <head> <title>留言板</title> </head> <body> <h1&g…

    Java 2023年6月15日
    00
  • 详解在spring中使用JdbcTemplate操作数据库的几种方式

    下面是“详解在spring中使用JdbcTemplate操作数据库的几种方式”的完整攻略。 1. 前言 在Spring开发中,使用JdbcTemplate操作数据库是常见的一种方式,可以方便地完成对数据库的CRUD操作。JdbcTemplate是Spring对JDBC API的封装,使得对数据库的操作更加简单、安全和易于维护。本文将对在Spring中使用Jd…

    Java 2023年5月20日
    00
  • Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)

    Spring Data JPA 复杂查询方式总结 Spring Data JPA 是 Spring 借鉴了 Hibernate 实现的一套 JPA 规范实现。Spring Data JPA 使得我们在使用 JPA 进行数据库操作时能够更加简单方便。 下面我们来讲解 Spring Data JPA 如何进行复杂查询,包括多表关联查询和自定义分页查询。 多表关联…

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