【发布时间】:2011-07-24 19:16:50
【问题描述】:
我有一个按钮,用于在选中调用内置函数“delRowData”时删除一行。很简单,直到您想要删除一组行/多行(如内置变量'selarrrow')。有没有人比我想出的可怕的垃圾有更好的答案(例如修改核心 jqGrid 代码)?
这是我的代码:
$("#deleteButton").click(function(){ var gr = jQuery("#myGrid").jqGrid('getGridParam','selarrrow'); var su=jQuery("#myGrid").jqGrid('delRowData',gr.toString()); (苏)? '' : alert("已经删除或不在列表中"); });现在是在 jquery.jqGrid.min.js 中修改核心代码的真正讨厌的部分:
delRowData:function(f){
for(var m=0,max=f.length;m<max;m++){
var j=false,i,c;
this.each(function(){
var e=this;
if(i=e.rows.namedItem(f[m])){
b(i).remove();
e.p.records--;
e.p.reccount--;
e.updatepager(true,false);
j=true;
if(e.p.multiselect){
c=b.inArray(f[m],e.p.selarrrow);
c!=-1&&e.p.selarrrow.splice(c,1)
}
if(f==e.p.selrow)e.p.selrow=null
}else return false;
if(e.p.datatype=="local"){
var k=e.p._index[f[m]];
if(typeof k!="undefined"){
e.p.data.splice(k,1);
e.refreshIndex()
}
}
});
}
/*if(e.p.altRows===true&&j){
var n=e.p.altclass;b(e.rows).each(function(a){
a%2==1?b(this).addClass(n):b(this).removeClass(n)
})
}*/
return j
}
有没有更好的方法来做到这一点?
/* 新细节**/
因此,即使我们在使用 jqGrid 的默认 'delRowData' 函数时遍历给定的 jqGrid 数组 'selarrrow' 并一一删除行:
您会看到代码无法正确执行,我们必须返回查看“delRowData”的 jqGrid 核心代码函数。现在的问题在于它如何处理数组。这是未缩小的函数:
delRowData:函数(f){ 变量 j=false,i,c; this.each(函数(){ 变量 e=这个; if(i=e.rows.namedItem(f)){ b(i).remove(); e.p.记录——; e.p.reccount--; e.updatepager(true,false); j=真; 如果(e.p.多选){ c=b.inArray(f,e.p.selarrrow); //c!=-1&&e.p.selarrrow.splice(c,1) } 如果(f==e.p.selrow) e.p.selrow=null }别的 返回假; if(e.p.datatype=="local"){ var k=e.p._index[f]; if(typeof k!="undefined"){ e.p.data.splice(k,1); e.refreshIndex() } } 如果(e.p.altRows===true&&j){ var n=e.p.altclass; b(e.rows).each(函数(a){ a%2==1?b(this).addClass(n):b(this).removeClass(n) }) } }); 返回 j }问题在于函数中间的注释行。我真的很想避免破解核心代码,但似乎你必须这样做,除非你有更好的主意。
【问题讨论】:
标签: javascript jquery-plugins jqgrid