最近做了一个用到了jqGrid的项目,在设置rowNum属性的时候遇到了坎坷…rowNum属性的默认值为20,当你不设置时,每页最多只给你显示20条数据。但是,当我们不想设置最大的数据条数时,我们还想显示全部数据怎么办,网上说设置为 -1 ,这时问题就出现了,这么设置在画面上会发现数据少了一条…坑啊…为了解决这个问题,无奈只能开始调试…最后发现问题发生点(jquery.jqGrid.src) var queryResults = query.select(), recordsperpage = parseInt(ts.p.rowNum,10), total = queryResults.length, page = parseInt(ts.p.page,10), totalpages = Math.ceil(total / recordsperpage), retresult = {}; queryResults = queryResults.slice( (page-1)recordsperpage , pagerecordsperpage ); query = null; cmtypes = null; retresult[ts.p.localReader.total] = totalpages; retresult[ts.p.localReader.page] = page; retresult[ts.p.localReader.records] = total; retresult[ts.p.localReader.root] = queryResults; retresult[ts.p.localReader.userdata] = ts.p.userData; queryResults = null; return retresult;请重点看这段代码queryResults = queryResults.slice( (page-1)recordsperpage , pagerecordsperpage );当rowNum属性值为-1时,recordsperpage 会为 -1 此时执行.slice函数就有问题了,此时函数相当于queryResults.slice(0,-1),小伙伴们可以去查查.slice函数的API,大体意思就是.slice(start,end) 返回区间为start 到 end位置的元素,请注意,如果是负数,则代表的意思是从数组尾部开始算起的元素这回明白为什么数据会少了一条吧…提供一种修改方式,添加一个条件判断吧 var queryResults = query.select(), … if (recordsperpage != -1){ queryResults = queryResults.slice( (page-1)recordsperpage , pagerecordsperpage ); } …