- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Firefox & IE
中,列表显示如预期,默认排序很好。并且No.
列从1,2,3...
升序显示
但是问题出在Chrome
中,并且显示顺序不正确(请参见下面的屏幕截图)
下面是我的代码,我也尝试了名为lineNo的相关列模型的firstsortorder:'asc'
,但它不起作用。
实际上,总共约有100条记录。
jQuery.post(jqDataUrl, data, function(response) {
if(response != null) {
jQuery("#jqTable").jqGrid("GridUnload");
jQuery("#jqTable").jqGrid({
data: response.rowdata,
datatype: "local",
colNames:
[
"",
"",
"",
"<spring:message code = "patron.transaction.number" />",
"<spring:message code = "sales.pdtType" />",
"<spring:message code = "sales.pdtDetails" />",
"<spring:message code = "patron.transaction.ticketID" />",
"<spring:message code = "sales.priceCat" />" ,
"<spring:message code = "sales.priceClass" />",
"<spring:message code = "sales.unitPrice" />",
"<spring:message code = "sales.ticketType" />",
"<spring:message code = "sales.dateFulfilled" />",
"<spring:message code = "sales.lastStatus" />",
"<spring:message code = "patron.transaction.lastUpdated" />",
"<spring:message code = "generic.jqgrid.action" />"
],
colModel:
[
{ name: "txnID", index: "txnID", width: 50,hidden:true, editable: true, align: "left" ,search:false,sortable:false},
{ name: "isReturned", index: "isReturned", width: 50,hidden:true, align: "left",title:false,search:false,sortable:false},
{ name: "description", index: "description", width: 50, align: "left",title:false,search:false,sortable:false},
{ name: "lineNo", index: "lineNo", width: 50, align: "left",title:false,search:false,sortable:false},
{ name: "pdtType", index: "pdtType", width: 100, align: "left",title:false,search:false,sortable:false},
{ name: "pdtDetails", index: "pdtDetails", width: 100, align: "left",title:false,search:false,sortable:false},
{ name: "ticketID", index: "ticketID", width: 100,key:true, align: "left",title:false,search:false,sortable:false},
{ name: "priceCat", index: "priceCat", width: 100, align: "left",title:false,search:false,sortable:false},
{ name: "priceClass", index: "priceClass", width: 100, align: "left",title:false,search:false,sortable:false},
{ name: "unitPrice", index: "unitPrice", width: 100, align: "left",title:false,search:false,sortable:false,
formatter:function (cellvalue, options, rowObject) {
if(cellvalue == null || cellvalue == "") {
return "";
} else {
return "${userCurrency}"+parseFloat(cellvalue).toFixed(2);
}
}
},
{ name: "ticketType", index: "ticketType", width: 80, align: "left",title:false,search:false,sortable:false},
{ name: "dateFulFilled", index: "dateFulFilled", width: 80, align: "left",title:false,search:false,sortable:false},
{ name: "lastStatus", index: "lastStatus", width: 80, align: "left",title:false,search:false,sortable:false},
{ name: "lastUpdated", index: "lastUpdated", width: 80, align: "left",title:false,search:false,sortable:false},
{ name: 'action', index: 'action', width: 50, align: "center", sortable: false, search:false}
],
autowidth: true,
height: 'auto',
grouping: true,
groupingView : {
groupField : ['description'],
groupColumnShow : [false, false],
groupText : ["<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>","<b>{0} </b>"],
groupCollapse : false,
groupOrder: ['asc', 'asc'],
},
pager: jQuery("#jqTablePager"),
//rowNum: 10,
rowList: [10, 20, 30],
cmTemplate: { title: false },
emptyrecords:"<spring:message code = 'generic.jqgrid.nosearchresults'/>",
jsonReader : {root: "rowdata", page: "page", total: "total", records: "records", repeatitems: false, id: "ticketID"},
gridComplete: function() {
var grid = jQuery("#jqTable");
var ids = grid.jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var row = ids[i];
var isReturned = grid.getCell(row, 'isReturned');
if(isReturned=='true'){
document.getElementById(row).style.backgroundColor='orange';
}
var button = "<img class='icons' title='View Fee Details' src='<c:url value='/resources/img/view.png' />' onclick='viewFeeDetailPopup(" + row + ")'/> <img class='icons' title='View Ticket History' src='<c:url value='/resources/img/lookup2.png' />' onclick='viewTicketHistoryPopup(" + row + ")'/>";
grid.jqGrid('setRowData', row, {action: button});
}
}
});
} else {
jQuery('#statusMsg').html("<fmt:message key="generic.jqgrid.noresponse"/>");
}
});
最佳答案
我想您需要在网格中添加sortname: "lineNo"
选项来解决您的主要问题。
您当前的代码还有其他一些小问题,可以进行改进。在下面,我列出了一些小建议(或不太小建议)。
首先,您需要遵循Limitations of grouping中使用的选项,并在网格中添加gridview: true
选项。如果您使用的是当前版本的jqGrid,则可以在内部解决此问题,但是我建议您明确添加该选项。
您应该删除jsonReader
选项,因为在datatype: "local"
的情况下它将被忽略。如果确实需要,可以使用localReader
代替(请参阅the documentation)。
您可以按一列description
进行分组(请参见groupField
中的groupingView
)。因此groupingView
的所有其他数组参数也应具有一个元素。当前,您将groupColumnShow
和groupOrder
与两个元素一起使用,并将groupText
与11(!!!)元素一起使用。
您可以从网格中删除具有hidden:true
属性(txnID
,isReturned
)的列。本地网格的输入data
仍保留所有属性。因此,您可以使用var item = $("#jqTable").jqGrid("getLocalRow", rowid)
,并且item
包含所有属性,例如item.isReturned
。 getLocalRow
比您当前使用的getCell
更有效。
您修改background-color
中某些行的gridComplete
。这是无效的(工作缓慢)。更有效的方法是在创建网格时使用rowattr
设置所需的样式。请参见the answer和this one。顺便说一句,如果需要,我建议您使用loadComplete
而不是gridComplete
。请参见the answer。
您应该使用pager: "#jqTablePager"
而不是pager: jQuery("#jqTablePager")
。由于常见错误,jqGrid的代码已更改了一天。现在,如果pager
的值是jQuery包装器(如jQuery("#jqTablePager")
),则jqGrid会将其标准化为选择器。它获取元素的id
并将pager: jQuery("#jqTablePager")
固定为pager: "#jqTablePager"
。但是,为什么首先需要通过id
搜索页面的DOM元素并使用id="jqTablePager"
查找DOM,然后为DOM元素(jQuery("#jqTablePager")
)创建jQuery包装器呢?这绝对是不需要的工作。您应该知道这一点,并且始终以id选择器pager
的形式始终使用"#jqTablePager"
。
在循环中使用setRowData
更改网格的每一行的action
列的速度很慢。网格中一个元素的每次更改都会导致页面中所有元素的重排。有关更多详细信息,请参见the answer和the article。更有效的方法是直接使用custom formatter创建action
单元格的正确内容。与您当前的实现非常接近的最简单的实现如下
{ name: 'action', width: 50, align: "center", sortable: false, search: false,
formatter: function (cellvalue, options) {
return "<img class='icons' title='View Fee Details' src='<c:url value='/resources/img/view.png' />' onclick='viewFeeDetailPopup(" +
options.rowId + ")'/> <img class='icons' title='View Ticket History' src='<c:url value='/resources/img/lookup2.png' />' onclick='viewTicketHistoryPopup(" +
options.rowId + ")'/>";
}}
rowId
参数的
options
属性为您提供必需的信息。如果需要,您可以使用自定义格式化程序的第三个
rowObject
参数来访问行项目的所有其他属性。
onclick
列中添加的图像中删除
action
,而改用
beforeSelectRow
回调。请参见
the answer。您可以轻松地修改代码,以区分列内的两个不同的
img
。
e.target
是单击的元素。例如,如果单击第一个img,则
$(e.target).attr("title")
将为
"View Fee Details"
;单击第二个img,则将为
View Ticket History
。
colModel
。您应该删除所有
index
属性以及所有具有默认值(例如
align: "left"
)的属性。您可以在
cmTemplate
中包含更多常用属性。使用
cmTemplate: {title: false, search: false, sortable: false}
可以减少代码并使代码更具可读性。列定义
{ name: "priceCat", index: "priceCat", width: 100, align: "left",
title: false, search: false, sortable: false}
{ name: "priceCat", width: 100 }
关于jquery - Jqgrid默认排序在Chrome中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26010148/
我收到此错误消息: .rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `' 我重新安装了 Ruby rvm reinstall ruby-2.5
我开始从事 WPF Ribbon 开发,非常好! 我的问题是找到(免费)基本图标(如文件保存/打开/等,剪切/粘贴/等)。 你有什么建议吗? 最佳答案 你看过Visual Studio Icon Li
我只找到经典的声音ID,但我需要Chord(默认)日历警报。如何播放声音? ks #define systemSoundID 1315 AudioServicesPlaySystemSound (s
在 Magento 中创建货件时,有一个复选框可让您“通过电子邮件发送货件副本”。 默认情况下未选中。有谁知道我需要编辑哪个文件才能默认设置为“选中”? 最佳答案 这是一个app/design/adm
我有一个简单的 IValueConverter,它只使用 TypeConverter 进行转换。但是,在某些情况下,提供的 TypeConverter 会失败。 如果转换器未提供 Binding,我想
我正在阅读教程,默认 Activity 是一个扩展另一个类的类,它所拥有的只是一个覆盖方法。应用程序如何工作,因为它不做任何其他事情?我很困惑! 最佳答案 父类 Activity 为您处理一切。 关于
我刚刚开始研究游戏框架。我正在尝试构建 rest api,并将 postgresql 用于我的数据库连接。这是我第一次同时使用 play 和 postgre。我在 build.sbt 中建立了一个数据
是否可以创建具有以下属性的 python 对象: class Foo: def __default_method__(x): return x f = Foo() f(10) > 10
我是 jQuery 的新手,遇到了一个烦人的问题。我有一些登录字段,当该字段为空时会填充默认文本,然后在单击时删除。 我的问题是,当用户保存了他们的用户名/密码(使用浏览器)时,如果他们返回页面,登录
考虑这个代码片段: void Foo(std::string str1, std::string str2) {} template void Bar() { Foo(Types{}...);
我正在编写一个简单的 C 程序,我应该用缓冲区溢出来攻击它。所以,我不想在编译时使用任何标志。如何消除使用的默认标志? # readelf -p .GCC.command.line stack Str
考虑这个代码片段: void Foo(std::string str1, std::string str2) {} template void Bar() { Foo(Types{}...);
我有以下代码[这是一道面试题]: #include #include using namespace std; class A{ public: A(){ cout co
我想在 Autofac 中为每个匹配的生命周期范围注册创建一个实例,但偶尔需要从全局容器(没有匹配的生命周期范围)请求一个实例。在不存在匹配生命周期范围的情况下,我想给出一个顶级实例而不是抛出异常。
我正在做一个收集单词共现的修改版本,所以我编写了自己的 javascript,我正在跟踪三个对象中的出现。但是,一旦对象变大(约 800 万、300 万和 172000),每 100000 个句子需要
我正在使用 pykalman 模块中的 KalmanFilter,我想知道它如何处理缺失的观察结果。根据文档: In real world systems, it is common to have
我有一个应用了 RenderTransform 的 Canvas ,如下所示: 谁能告诉我这些值是什么意思?我似乎无法找到用于解析这些值的转换器。 最佳答案 如 RenderTransform是 T
我是 Linux 的新手,现在使用 CentOS 6。我在这里使用 MySQL 工作台,每当我尝试添加新连接时,它都会询问我默认的 key 环密码。我真的不知道,这个密码是从哪里设置的,我之前没有设置
我在 Ubuntu 18.04 上工作。我没有定义 GL_GLEXT_PROTOTYPES .我使用 glXGetProcAddress 加载“核心”OpenGL 函数.我的申请链接到 /usr/li
我按照文档中的示例添加了对使用 asio 加载 HTTPS 站点的支持,这意味着我调用 ctx.set_default_verify_paths();使用系统默认路径来查找证书。 然而,我得到:una
我是一名优秀的程序员,十分优秀!