我有一个按钮用于删除一行时,检查调用内置函数'delRowData'。很简单,直到你想删除一行/多行(如在内置变量'selarrrow')。有没有人比我想出来的可怕的垃圾有更好的答案(例如修改核心jqGrid代码)?jqGrid行删除
这里是我的代码:
$("#deleteButton").click(function(){ var gr = jQuery("#myGrid").jqGrid('getGridParam','selarrrow'); var su=jQuery("#myGrid").jqGrid('delRowData',gr.toString()); (su) ? '' : alert("Already deleted or not in list"); });
和现在的修改核心代码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数组“selarrrow”和一个删除的行之一,而使用的jqGrid默认的“delRowData”功能:
$("#deleteButton").click(function(){ $.each($("#myGrid").jqGrid('getGridParam','selarrrow'), function(index, value) { console.log($("#myGrid").jqGrid('getGridParam','selarrrow')); if ($("#myGrid").jqGrid('delRowData', value)) { console.log($("#myGrid").jqGrid('getGridParam','selarrrow')); console.log(value); } else{ console.log($("#myGrid").jqGrid('getGridParam','selarrrow')); console.log(value); } }); });
你会看到代码无法正确执行,我们必须回头看看'delRowData'的jqGrid核心代码函数。现在的问题在于它如何处理阵列。以下是未缩小的功能:
delRowData:function(f){ var j=false,i,c; this.each(function(){ var e=this; if(i=e.rows.namedItem(f)){ b(i).remove(); e.p.records--; e.p.reccount--; e.updatepager(true,false); j=true; if(e.p.multiselect){ c=b.inArray(f,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]; 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 }
问题是在函数中间注释掉了一行。我真的想避免黑客入侵核心代码,但似乎你必须这样做,除非你有更好的主意。
我试着改变你的代码来得到它的工作(例如每()代替的foreach()),但无济于事。返回的错误是:jQuery(“#myGrid”)。jqGrid('getGridParam','selarrrow')。foreach不是函数 – 2011-03-31 21:37:39
对不起,这是我的错。应该只是'.each()' - 我已经更新了它 – 2011-03-31 22:00:24
嘿加里,谢谢你在这里。我尝试了.each方法,但它返回了与我上次评论中一样的尝试foreach的错误。所需的函数是$ .each方法,它可以处理数组,而每个只能遍历对象。我根据这个做了新的编辑。 – 2011-04-01 20:25:11