自定义jqGrid编辑功能,当行获取焦点时编辑,失去焦点时保存
1 http://www.360doc.com/content/17/0719/15/9200790_672577533.shtml
2 /******************************************* 3 * Description: 4 * 自定义jqGrid编辑功能,当行获取焦点时编辑,失去焦点时保存 5 * 6 * 调用方法: 7 * 在jGrid的(opts参数中)"editurl"属性的上面或下面添加属性 customEdit: true 8 * 9 * Author: 10 *******************************************/ 11 var JqGridCustomEdit = { 12 _cacheName: "editGrid_PrevRowKey", 13 _saveBtnName: "editGrid_BtnSave", 14 15 init: function (gridID) { 16 //this.createSaveButton(gridID); 17 this.createRowBlurEvent(gridID); 18 }, 19 20 createSaveButton: function (gridID) { 21 var self = this; 22 var saveBtnID = gridID + "_" + self._saveBtnName; 23 var htmlButton = '<input type="button" id="' + saveBtnID + '" onClick="JqGridCustomEdit._saveData(\'' + gridID + '\')" style="display:none" value="saveRow" />'; 24 $("body").append(htmlButton); 25 }, 26 27 createRowBlurEvent: function (gridID) { 28 var self = this; 29 $("body").bind("click", function (event) { 30 self.onRowBlur(gridID, event); 31 }); 32 }, 33 34 onSave: function (gridID) { 35 var saveBtnID = gridID + "_" + this._saveBtnName; 36 $("#" + saveBtnID).click(); 37 }, 38 showEditCss: function (gridID, show) { 39 if (show) { 40 $("#" + gridID + "_ilsave").removeClass('ui-state-disabled'); 41 $("#" + gridID + "_ilcancel").removeClass('ui-state-disabled'); 42 $("#" + gridID + "_iladd").addClass('ui-state-disabled'); 43 $("#" + gridID + "_iledit").addClass('ui-state-disabled'); 44 } 45 else { 46 $("#" + gridID + "_ilsave").addClass('ui-state-disabled'); 47 $("#" + gridID + "_ilcancel").addClass('ui-state-disabled'); 48 $("#" + gridID + "_iladd").removeClass('ui-state-disabled'); 49 $("#" + gridID + "_iledit").removeClass('ui-state-disabled'); 50 } 51 }, 52 onSelectRow: function (gridID, rowid) { 53 var self = this; 54 var rowKeyCacheID = gridID + "_" + self._cacheName; 55 var prevRowKey = $("body").data(rowKeyCacheID); 56 57 $("body").data(rowKeyCacheID, rowid); 58 59 JqGridFormatCell.beforEditRow(gridID, rowid); 60 $("#" + gridID).jqGrid("editRow", rowid, $("#" + gridID).get(0).p.editParams); 61 self.showEditCss(gridID, true); 62 }, 63 64 onRowBlur: function (gridID, event) { 65 var haveEditRow = false; 66 $("#" + gridID).find("tr").each(function () { 67 if ($(this).attr("editable") == "1") { 68 haveEditRow = true; 69 return false; 70 } 71 }); 72 73 if (haveEditRow) { 74 var self = this; 75 var rowid = $("#" + gridID).jqGrid('getGridParam', 'selrow'); 76 if (rowid == null) { return; } 77 78 var eventObj = ((event.srcElement) ? event.srcElement : event.target); 79 var prev = false; 80 var next = false; 81 var pClass = $(eventObj).parent().attr("class"); 82 var nClass = $(eventObj).parent().attr("class"); 83 if (pClass) prev = pClass.indexOf("ui-datepicker-prev") != -1; 84 if (nClass) next = nClass.indexOf("ui-datepicker-next") != -1; 85 if ($("#ui-datepicker-div").find(eventObj).length > 0 || prev || next) { return; } 86 87 if (eventObj.tagName == "TD") { 88 var currgriddom = $("#" + gridID).find(eventObj).length; 89 if (currgriddom == 0) { 90 self._saveData(gridID); 91 } 92 // var $eventTR = $(eventObj).parent(); 93 // if ($eventTR.attr("id") != rowid) { 94 // self._saveData(gridID); 95 // } 96 } 97 else if (eventObj.tagName == "INPUT" || eventObj.tagName == "SELECT" || eventObj.tagName == "OPTION") { 98 var rid = $(eventObj).attr("id"); 99 if (rid && rid.indexOf(rowid) == -1) { 100 self._saveData(gridID); 101 } 102 } 103 else { 104 self._saveData(gridID); 105 } 106 } 107 }, 108 109 _saveData: function (gridID) { 110 var self = this; 111 var rowKeyCacheID = gridID + "_" + self._cacheName; 112 113 var rowid = $("body").data(rowKeyCacheID); 114 if (rowid == null) { 115 return false; 116 } 117 if (rowid == "new_row" && $("#" + rowid).attr("class").indexOf("jqgrid-new-row") != -1) { 118 $("#" + gridID).jqGrid('saveRow', rowid, $("#" + gridID).get(0).p.addParams); 119 } else { 120 $("#" + gridID).jqGrid('saveRow', rowid, $("#" + gridID).get(0).p.editParams); 121 } 122 self.showEditCss(gridID, false); 123 // $("#" + gridID).jqGrid('saveRow', rowid, function (result) { 124 // self.showEditCss(gridID, false); 125 // if (result.responseText == "") { 126 // //$.jAlert("Update is missing!"); 127 // return false; 128 // } else { 129 // $("body").removeData(rowKeyCacheID); 130 // //$.jAlert("Update is successful"); 131 // return true; 132 // } 133 // }); 134 }