Dường như với tôi rằng bạn không phải là người đầu tiên hỏi cùng một câu hỏi. Gần đây tôi hỏi trên the close question (đọc nhiều bình luận cho câu trả lời). Một số khác old answer bao gồm the demo có thể trả lời một số câu hỏi mở của bạn.
Mã của bạn sử dụng beforeRequest
không làm việc chỉ vì chức năng beforeRequest
sẽ được caled ngay trước khi cuộc gọi ajax và sự thay đổi của tham số search
là quá muộn. Hơn nữa overwiting của filters
mọi lúc có lẽ không phải là ý tưởng tốt nhất. Trong trường hợp người dùng sẽ không thể đặt bất kỳ bộ lọc lưới nào khác.
Vì vậy, tôi có thể lặp lại, rằng việc giải quyết các giải pháp mà bạn cần là rất đơn giản. Bạn chỉ nên đặt thuộc tính filters
của tham số postData
của jqGrid vào bộ lọc mà bạn cần và đặt một tham số jqGrid khác search:true
bổ sung. Đó là tất cả! Sau đó, người dùng sẽ có thể mở hộp thoại tìm kiếm nâng cao và ghi đè lên các bộ lọc. Người dùng cũng có thể nhấp vào nút "Đặt lại" của hộp thoại tìm kiếm trước và đặt filters
thành chuỗi trống và search:false
.
Để hiểu rõ hơn, tôi phải xóa thông số search
hoặc một số jqGrid khác sẽ được sử dụng trong URL như thế nào. Có tham số prmNames của jqGrid xác định tên của tham số gửi dưới dạng một phần của URL hoặc như một phần của dữ liệu Được đăng lên máy chủ. Giá trị mặc định của prmNames chứa search:"_search"
và mã của nội populate chức năng được sử dụng bởi jqGrid có đoạn mã đơn giản sau đây:
var prm = {}, pN=ts.p.prmNames;
if(pN.search !== null) {prm[pN.search] = ts.p.search;}
if(pN.nd !== null) {prm[pN.nd] = new Date().getTime();}
if(pN.rows !== null) {prm[pN.rows]= ts.p.rowNum;}
if(pN.page !== null) {prm[pN.page]= ts.p.page;}
if(pN.sort !== null) {prm[pN.sort]= ts.p.sortname;}
if(pN.order !== null) {prm[pN.order]= ts.p.sortorder;}
...
$.extend(ts.p.postData,prm);
nơi
prmNames: {page:"page",rows:"rows", sort: "sidx",order: "sord", search:"_search",
nd:"nd", id:"id",oper:"oper",editoper:"edit",addoper:"add",
deloper:"del", subgridid:"id", npage: null, totalrows:"totalrows"}
Vì vậy, để thiết lập _search
tham số của một URL nên đặt search
tham số của jqGrid.
Nhìn vào the following demo. Bạn có thể dễ dàng để xác minh bằng Fiddler của Firebug rằng jqGrid khỏi trang gửi HTTP GET với url sau:
http://www.ok-soft-gmbh.com/jqGrid/MultisearchFilterAtStart1.json?filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22invdate%22%2C%22op%22%3A%22gt%22%2C%22data%22%3A%222007-09-06%22%7D%2C%7B%22field%22%3A%22invdate%22%2C%22op%22%3A%22lt%22%2C%22data%22%3A%222007-10-04%22%7D%2C%7B%22field%22%3A%22name%22%2C%22op%22%3A%22bw%22%2C%22data%22%3A%22test%22%7D%5D%7D&_search=true&nd=1297508504770&rows=10&page=1&sidx=id&sord=asc
Vì vậy, nó thực hiện chính xác những gì bạn cần. Mã của bản trình diễn chứa đoạn mã sau:
$("#list").jqGrid({
url: 'MultisearchFilterAtStart1.json',
datatype: "json",
postData: {
filters:'{"groupOp":"AND","rules":['+
'{"field":"invdate","op":"gt","data":"2007-09-06"}'+
',{"field":"invdate","op":"lt","data":"2007-10-04"}'+
',{"field":"name","op":"bw","data":"test"}]}'
},
search:true,
// ...
});
Great !! đoạn mã cuối cùng đã giải quyết hoàn toàn sự đau khổ - điều này - 'jQuery ('#' + block_id) .jqGrid ({ url: loadUrl, loại: 'POST', postData: {block_id: block_id, bộ lọc: '{"groupOp": "AND", "quy tắc": [{"trường": "Tải lên đám mây", "op": "cn", "dữ liệu": "costa"}]}'}, tìm kiếm: đúng, autowidth: true, chiều cao: '100%', kiểu dữ liệu: "json", // .. }); ' –
[hết thời gian chỉnh sửa nhận xét trước đó] - khi tôi đặt tìm kiếm của mình/lọc params vào các đối số lưới-init, nó hoàn toàn làm cho nó tất cả các công việc. Cảm ơn bạn, tôi thực sự đánh giá cao sự giúp đỡ của bạn! –
@Oleg Ivanov: Bạn được chào đón! – Oleg