Vấn đề chính là để có thể chọn hàng bạn cần biết id của hàng mới. Trong hầu hết trường hợp, id sẽ được tạo ra bởi cơ sở dữ liệu nơi bạn lưu dữ liệu trên máy chủ. Vì vậy, yêu cầu đầu tiên đối với mã máy chủ của bạn là trả lại id trên hàng mới trong phản hồi của máy chủ về thao tác "thêm".
Ví dụ: mã máy chủ của bạn trả về id của hàng của bạn làm phản hồi về thao tác "thêm".
$("#list").jqGrid('navGrid', '#pager', {/*navGrid options*/}, {/*Edit optoins*/}, {
/*Add options:*/
reloadAfterSubmit: false,
afterSubmit: function (response) {
return [true, '', response.responseText];
},
addedrow: "last", // add new row at the end of grid
afterComplete: function (response, postdata) {
// this.gbox is the string like "#gbox_list"
var gridId = this.gbox.substr(6);
//if (postdata.oper === "add") {
// // highlight the new "added" row
// var row = $("#" + $.jgrid.jqID(postdata.id));
// row.effect("highlight", {}, 3000);
//}
$('#' + gridId).jqGrid('setSelection', postdata.id);
}
});
Trong phần nhận xét của afterComplete
Tôi thấy làm thế nào bạn có thể sử dụng jQuery UI highlight hiệu lực để làm nổi bật dòng thêm mới (xem the old answer). Nó có thể thay thế cho việc lựa chọn hàng. Bạn cũng có thể sử dụng cả hiệu ứng chọn và tô sáng.
Tùy chọn reloadAfterSubmit: false
có ít nhất hai nhược điểm.
- Nếu sử dụng sử dụng được sắp xếp dữ liệu trong lưới (
sortname
tham số của jqGrid là không có sản phẩm nào) các hàng của lưới điện sẽ không chính xác được sắp xếp sau hàng mới sẽ được thêm vào như là người đầu tiên hoặc là hàng cuối cùng trong lưới.
- Nếu lưới có hàng tối đa trên mỗi trang (được xác định bởi tham số
rowNum
), việc thêm hàng mới sẽ theo sau vào lưới có quá nhiều hàng trên mỗi trang.
Vì vậy, bạn có thể làm như sau
var idToSelect;
$("#list").jqGrid({
// ... all jqGrid options
loadComplete: function() {
if (idToSelect) {
$(this).jqGrid('setSelection', idToSelect);
//$("#" + $.jgrid.jqID(idToSelect)).effect("highlight", {}, 3000);
idToSelect = undefined;
}
}
}).jqGrid('navGrid', '#pager', {/*navGrid options*/}, {/*Edit optoins*/}, {
/*Add options:*/
afterSubmit: function (response) {
// save the id of new row. If the format of the data returned from
// the server is different you should change the next row
// corresponds to the returned data. For example if the server returns
// back JSON data in the form {"myId":"123"} you should use
// $.parseJSON(response.responseText).myId
// instead of response.responseText below
idToSelect = response.responseText;
return [true, '', response.responseText];
}
});
Trong trường hợp hàng bổ sung mới sẽ được lựa chọn sau quá trình tải của lưới điện.
Bạn nên mô tả chính xác hơn loại "chèn" nào bạn sử dụng. Ví dụ: bạn sử dụng chỉnh sửa biểu mẫu. Người dùng nhấp vào nút "Thêm" và dữ liệu sẽ được lưu thành công trên máy chủ sau khi người dùng nhấp vào nút "Gửi". Bạn muốn thực hiện một số hành động (sửa đổi phản hồi của máy chủ) sau khi nhận được phản hồi từ máy chủ mà dữ liệu đã được thêm thành công. Bạn có gửi lại từ máy chủ 'id' của hàng mới hay không? – Oleg
Có, người dùng nhấp vào nút "thêm", điền vào dữ liệu cho hàng mới, nhấp vào nút "gửi" và hàng mới trong bảng được tạo. Tôi không cần phải sửa đổi phản hồi của máy chủ. Trong trường hợp cụ thể này, tôi chỉ cần chọn hàng đầu tiên trong bảng, sử dụng phương thức setSelection, nhưng tôi cần phải ngăn chặn hành vi đó nếu hàng mới được thêm vào. Đó là lý do tại sao tôi tìm kiếm sự kiện cho điều đó. – cincplug
Và tôi có id hàng được gửi từ máy chủ. – cincplug