当标题顺序更改时,带有状态保存的数据表过滤器会导致问题

2024-04-22

我有一个html页面和一些 javascript 代码。下面是我的工作html:

<table class="table table-hover" id="gridHelpDesk">
    <thead>
        <tr>
            <th class="color-white">Employee ID</th>
            <th class="color-white">Name</th>
            <th class="color-white">Email</th>
            <th class="color-white">Survey Status</th>
            <th class="color-white">Start Date</th>
            <th class="color-white">Completed Date</th>
            <th class="color-white">Survey Link</th>
            <th class="color-white">Reactivate Link</th>
            <th class="color-white">Delete Responses</th>
            <th class="color-white">Create New Link</th>
            <th class="color-white">Send Reminder</th>
        </tr>
        <tr>
            <th class="filter">Search Employee ID</th>
            <th class="filter">Search Employee Name</th>
            <th class="filter">Search Employee Email</th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
        </tr>
    </thead>
</table>

这是我的javascript code:

    var dtGridHelpDesk;
    var EmployeeName;
    var EmployeeID;
    var Email;

    $(document).ready(function () {
        InitializerHelpDeskGRID()
    })

    function InitializerHelpDeskGRID() {

        $('.filter').each(function () {
            var title = $(this).text();
            var classForFilter = $(this).text();
            classForFilter = classForFilter.split(' ').join('');

            $(this).html('<input type="text" class="form-control input-sm ' + classForFilter + '" placeholder="' + title + '" onclick="event.stopPropagation()" onkeypress="event.stopPropagation()" />');

        });

        dtGridHelpDesk = $('#gridHelpDesk').dataTable({
            scrollCollapse: true,
            serverSide: true,
            ajax: {
                url: '@Url.Content("~/Home/GetHelpdeskData")',
                data: SearchHDParams,
                dataSrc: HDGridDataBound,
                type: "POST"
            },
            processing: true,
            processing: "<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate' />",
            bDestroy: true,
            select: true,
            paging: false,
            bLengthChange: false,
            info: false,
            ordering: false,
            searching: true,
            stateSave: true,
            stateLoadParams: function (settings, data) {
                if (data.order) delete data.order;
            },
            columnDefs: [
            {
                targets: 0,
                data: "EmployeeID",

            },
            {
                targets: 1,
                data: "EmployeeName",
            },
            {
                targets: 2,
                data: "Email",
            },
            {
                targets: 3,
                data: "SurveyStatus"
            },
            {
                targets: 4,
                data: "StartedDate"
            },
            {
                targets: 5,
                data: "CompleteDate"
            },
            {
                targets: 6,
                data: "PositionNumber",
                render: function (data, type, full, meta) {
                    return '<button class="btn btn-info btn-sm" onclick="CopyLink(this, \'' + full.SurveyLink + '\')"> Copy </button>'
                }
            },
            {
                targets: 7,
                data: "PositionNumber",
                render: function (data, type, full, meta) {
                    return '<button class="btn btn-success btn-sm" onclick="ReActivateLink(this, \'' + full.PositionNumber + '\')"> ReActivate </button>'
                }
            },
            {
                targets: 8,
                data: "PositionNumber",
                render: function (data, type, full, meta) {
                    return '<button class="btn btn-warning btn-sm" onclick="DeleteResponses(this, \'' + full.PositionNumber + '\')"> Delete & ReActivate </button>'
                }
            },
            {
                targets: 9,
                data: "PositionNumber",
                render: function (data, type, full, meta) {
                    return '<button class="btn btn-default btn-sm" onclick="UpdateLink(this, \'' + full.PositionNumber + '\')"> Create </button>'
                }
            },
            {
                targets: 10,
                data: "PositionNumber",
                render: function (data, type, full, meta) {
                    return '<button class="btn btn-danger btn-sm" onclick="SendReminder(this, \'' + full.PositionNumber + '\')"> Send Reminder </button>'
                }
            }]
        });

        var state = dtGridHelpDesk.api().state.loaded();
        if (state) {
            dtGridHelpDesk.api().columns().eq(0).each(function (colIdx) {
                var colSearch = state.columns[colIdx].search;
                if (colSearch.search) {
                    $('input', dtGridHelpDesk.api().column(colIdx).header()).val(colSearch.search);
                }
            });

            dtGridHelpDesk.api().draw();
        }

        dtGridHelpDesk.api().columns().eq(0).each(function (colIdx) {
            $('input', dtGridHelpDesk.api().column(colIdx).header()).on('keyup change', function () {
                dtGridHelpDesk.api()
                    .column(colIdx)
                    .search(this.value)
                    .draw();
            });
        });
    }

    function SearchHDParams(d) {
        d.EmployeeName = $('.SearchEmployeeName').val()
        d.EmployeeID = $('.SearchEmployeeID').val()
        d.Email = $('.SearchEmployeeEmail').val()
    }

    function HDGridDataBound(response) {
        if (response.IsSuccess == true) {
            return response.gridData;
        }
        else {
            toastr.error("Something went wrong, Please try again after some time.");
        }
    }

奇怪的是我的javascript如果我更改标题行的顺序,代码将失败html。例如,如果我交换search标题中的文本html,如下所示,那么我的javascript代码失败。

 <table class="table table-hover" id="gridHelpDesk">
    <thead>     
        <tr>
            <th class="filter">Search Employee ID</th>
            <th class="filter">Search Employee Name</th>
            <th class="filter">Search Employee Email</th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
        </tr>      
        <tr>
            <th class="color-white">Employee ID</th>
            <th class="color-white">Name</th>
            <th class="color-white">Email</th>
            <th class="color-white">Survey Status</th>
            <th class="color-white">Start Date</th>
            <th class="color-white">Completed Date</th>
            <th class="color-white">Survey Link</th>
            <th class="color-white">Reactivate Link</th>
            <th class="color-white">Delete Responses</th>
            <th class="color-white">Create New Link</th>
            <th class="color-white">Send Reminder</th>
        </tr>          
    </thead>
</table>

为什么会发生这种情况,我该如何解决?我不明白为什么要交换我的项目中的顺序html会像这样破坏我的 JavaScript,而且我也没有看到解决该问题的明确方法。

我已经尝试了许多可能的解决方案,但是当我根据我的函数(SearchHDParams)加载数据时,javascript覆盖状态。因此,到目前为止我的解决方案都不起作用。任何帮助表示赞赏。


CAUSE

你的代码dtGridHelpDesk.api().column(colIdx).header()回报th底部标题行中不包含的单元格input切换标题行顺序后的元素。

解决方案1

根据您的代码编写方式,最简单的解决方案是使用orderCellsTop https://datatables.net/reference/option/orderCellsTop选项。它将使 DataTables 返回th致电时顶部标题行中的单元格column().header() https://datatables.net/reference/api/column().header()API方法。

"orderCellsTop": true

现在不会造成任何问题,因为您已禁用订购。如果您决定稍后启用排序,此解决方案将导致问题,因为您的顶行有搜索框而不是列标题。

解决方案2

更好的解决方案是替换代码:

$('input', dtGridHelpDesk.api().column(colIdx).header())

with:

$('input', $('th', dtGridHelpDesk.api().table().header()).eq($(dtGridHelpDesk.api().column(colIdx).header()).index()))

此代码在以下位置查找搜索框th两个标题行的单元格,而不仅仅是底部的单元格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当标题顺序更改时,带有状态保存的数据表过滤器会导致问题 的相关文章

  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • Oracle中如何通过XPath获取第一个元素

    在我的 Oracle 数据库中 我有这样的记录
  • Heroku 找不到 Postgres JDBC 驱动程序

    使用 Maven 为 Heroku 编写纯 Java 服务器应用程序 连接到 Heroku 的 Postgres 数据库 运行时一切正常locally 使用 IntelliJ 的配置来运行 Java 应用程序 将 Heroku 的 DB U
  • wp 作业管理器自定义日期过滤器

    我正在使用 wp job manager 并尝试按开始日期进行过滤 搜索 这是我的代码 它对我不起作用 add filter job manager get listings filter by date field query args
  • 如何访问 nvd3 中 d3 图的 x 和 y 比例?

    我正在使用 nvd3 绘制一些系列 并想向图中添加一些任意矩形 如何访问 d3 图的底层 x 和 y 比例 以便将矩形坐标转换为 svg 像素坐标 以便与现有数据的比例相同 function d3 render response nv ad
  • 在 IE 中使用 html 音频:MEDIA12899:音频/视频:未知的 MIME 类型

    html如下
  • mysql中可以使用if语句吗?

    我正在尝试创建一个查询 该查询将生成取决于价格的总使用量 我不知道这是否可以在查询中实现 所以就在这里 主表 这个表是所有人的 所以这个是连续的 这个可以添加 ID列是唯一的 id price date created 25 8 5 201
  • PHP CodeSniffer 有多有用?代码标准的总体执行情况? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 android 连接到 PrestaShop Web 服务时出现 401 错误

    我试图在 PrestaShop 中调用 Web 服务 但收到 401 未授权错误 即使我已经通过了用户名密钥 我也尝试了身份验证器 但收到错误 HttpRetryingError 在下面找到我所做的代码片段 方法一 final String
  • 将 SSL 连接到子域 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已为我的主域分配了 SSL 我想知道是否可以将 SSL 用于我的子域 我坦白地尝试了一下 但它显示警告页面 说该页面不安全等等 有没有解决方案 以便
  • 如何使用故事板通过自定义图像设置 iPhone 选项卡栏图标

    我是 iphone 开发的新手 我需要在标签栏中放置一个自定义图像图标 但它只显示默认颜色 黑色和蓝色 帮助我克服这个错误朋友 在应用程序中添加图像 并参见附图
  • 如何在hadoop/map reduce中创建固定行数的输出文件?

    假设我们有 N 个具有不同行数的输入文件 我们需要生成输出文件 使得每个输出文件恰好有 K 行 最后一个输出文件可以有 是否可以使用单个 MR 作业来完成此操作 我们应该打开文件以便在reducer中显式写入 输出中的记录应该被打乱 tha
  • 父子表记录-构建SQL查询

    这是我的表格和这些表格的数据 表名 Code CID Code 1 abc 2 def 3 xyz 表名 Details ID Name CID 1 a 1 2 b 2 结果表 ID Code Name 1 abc a 2 abc Null
  • 数据库中的额外查询或额外列哪个更好?

    对于可用时间非常短的数据来说 额外的查询或数据库中的额外列更好 示例 在子用户管理的情况下 我在主用户 表中添加一列额外的 super user id 并在用户类型为 sub user 且默认列值为 1 时进行输入 或者我创建新表并管理该表
  • 您如何处理标准库的signed char -> int 问题?

    这是我工作中一个长期存在的问题 我意识到我still没有好的解决办法 C 天真地为 int 定义了它的所有字符测试函数 int isspace int ch 但是字符通常是带符号的 并且完整的字符通常不适合 int 或用于字符串的任何单个存
  • 如何渲染响应?

    我正在使用 render to response 将列表发送到模板 我正在使用 django 快捷方式 锄头要这么做吗 如何使用变量设置上下文实例 from django shortcuts import render to respons
  • C#:将设置导入文件/从文件导出设置

    从应用程序内将应用程序内部设置导入 导出到文件中的最佳方法是什么 我有 Settings settings 文件 与设置文件绑定的 winform UI 并且我想要导入 导出设置 类似于 Visual Studio 导入 导出设置功能 如果
  • 如何测试 ANT 中的目录是否为空?

    如何测试 ant 中的目录是否为空 您可以使用pathconvert http ant apache org manual Tasks pathconvert html任务来做到这一点 与setonempty财产
  • Lua中如何对数字表求和?

    Lua有内置的吗sum 功能 我似乎找不到一个 我几乎翻遍了文档中的所有地方 或许table sum 或类似的东西 以遵循当前的约定 但由于我找不到它 我不得不实现它 function sum t local sum 0 for k v i
  • Magento - 检查管理员和客户是否登录

    我有一个安装了 Magento 1 4 0 1 的 Web 服务器 我有另一个与之共享凭据的网站 我已经设法检查客户是否登录 在更改 Magento 中的 cookie 位置之后 但是当我还尝试确定管理员是否登录时 事情变得复杂 我只能得到
  • 当标题顺序更改时,带有状态保存的数据表过滤器会导致问题

    我有一个html页面和一些 javascript 代码 下面是我的工作html table class table table hover thead tr th class color white Employee ID th th cl