У меня есть кнопка, используемая для удаления строки при проверке, которая вызывает встроенную функцию delRowData.Достаточно просто, пока вы не захотите удалить массив строк / несколько строк (как во встроенной переменной selarrrow).У кого-нибудь есть лучший ответ, чем ужасная гадость, которую я придумал (например, изменение основного кода 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» и удалим строки одну за другой, используя стандартную функцию jRGrid «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);
}
});
});
вы увидите, что код работает неправильно имы должны вернуться к функции основного кода jqGrid в delRowData.Проблема сейчас заключается в том, как она справляется с массивом.Вот функция uninified:
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
}
Проблема в закомментированной строке в середине функции.Я действительно хотел избежать взлома кода ядра, но, похоже, вам придется это делать, если у вас нет лучшей идеи.