今天開發jqgrid需要有單行刪除功能和所有選中刪除功能,在進行所有選中刪除功能開發時最簡單的代碼卻總是跑不通。
其實心中早已預料到,肯定是自己寫了一些把自己繞進去的代碼,因為這幾行就是一個簡單的循環。
找出這段自己繞自己的代碼,這勾起了我巨大的興趣,因為肯定有編程的細節我忽略了,在關鍵時刻,這些細節可能是致命的。
1 if("basMgmtGridIdGrid" == rowid) { 2 var ids = jqgrid.jqGrid('getGridParam', 'selarrrow'); 3 for(var i = 0; i < ids.length; i++) { 4 jqgrid.delRowData(ids[i]); 5 } 6 } else { 7 jqgrid.delRowData(rowid); 8 }
前端顯示有兩個選中的行,觸發刪除所有選中行時之刪除了一行。
原來數組的length屬性是動態變化的,刪除了一行,length就減1,但i還是執行i++了,結果不滿足下一次循環的條件了
修改代碼
1 if("basMgmtGridIdGrid" == rowid) { 2 var ids = jqgrid.jqGrid('getGridParam', 'selarrrow'); 3 while(ids.length > 0) { 4 jqgrid.delRowData(ids[0]); 5 } 6 } else { 7 jqgrid.delRowData(rowid); 8 }
聯想擴展:做為一個Java程序員,一下就想到了java中的集合,list、set、map的length()也是動態的。其實這些基本的知識自己都學過,但是就是不出錯記不住啊。