我有一個按鈕用於刪除一行時,檢查調用內置函數'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