2012-01-31 443 views
3

我正在使用jqgrid 4.3.1,我正在使用本地數據進行表單編輯。問題是添加或編輯後表單不關閉。這是我的代碼。jqgrid - 關閉窗體對話框

    $('#studentset').jqGrid({ 
         data: mydata, 
         datatype: "local", 
         colNames:['id','First Name', 'Last Name'], 
         colModel:[ 
            {name:'id',index:'id', width:60}, 
            {name:'firstName',index:'fName', width:300, editable:true}, 
            {name:'lastName',index:'lastName', width:300, editable:true} 
         ], 
         pager: '#pager', 
         rowNum: 10, 
         rowList: [5, 10, 20], 
         sortname: 'id', 
         sortorder: 'asc', 
         viewrecords: true, 
         height: "80%", 
         caption: "Students to be Registered", 
         editurl: corpUrl 
        }); 
        $('#studentset').jqGrid('navGrid', '#pager', { add: true, edit: true, del: false, search: false, refresh: false }, 
          { 
           recreateForm: true, 
           closeAfterEdit: true, 
           modal:true, 
           afterSubmit: function(data){ 
            var myObject = eval('(' + data.responseText + ')'); 
            $('#studentset').setGridParam({data: myObject}).trigger("reloadGrid"); 
           } 
          }, 
          { 
           recreateForm: true, 
           closeAfterAdd: true, 
           modal:true,     
           afterSubmit: function(data){ 
            var myObject = eval('(' + data.responseText + ')'); 
            $('#studentset').setGridParam({data: myObject}).trigger("reloadGrid"); 
           } 
          }, 
          {},{},{}  
        ); 

注意在編輯和添加navGrid選項我已經指定了相關的選項。 closeAfterAdd: true,closeAfterEdit: true。但模態形式只是拒絕關閉。我不確定它是否是這個版本的jqgrid中的一個bug。

有人可以提供一些指導嗎?可能是,如何手動關閉對話框?

回答

3

好吧所以它的邏輯性,只需觸發對話框關閉按鈕的點擊事件就像這樣。您將使用火蟲找到span標籤的ID。

    $('#studentset').jqGrid('navGrid', '#pager', { add: true, edit: true, del: false, search: false, refresh: false }, 
          { 
           modal:true, 
           jqModal: true, 
           afterSubmit: function(data){ 
            var myObject = eval('(' + data.responseText + ')'); 
            $('#studentset').setGridParam({data: myObject}).trigger("reloadGrid"); 
            $(".ui-icon-closethick").trigger('click'); 
           } 
          }, 
          { 
           modal:true, 
           jqModal: true, 
           afterSubmit: function(data){ 
            var myObject = eval('(' + data.responseText + ')'); 
            $('#studentset').setGridParam({data: myObject}).trigger("reloadGrid"); 
            $(".ui-icon-closethick").trigger('click'); 
           } 
          }, 
          {},{},{}  
        ); 

希望有人從中受益。

+0

此解決方案的問題是,如果您打開任何其他對話框,它們也將被關閉。原因是你沒有觸發跨度的ID,你在跨度的類別上觸發,他們將默認共享一個類別。 – Joseph 2012-02-24 19:09:31

+0

你能解釋一下這兩行嗎? var myObject = eval('('+ data.responseText +')'); $('#studentset')。setGridParam({data:myObject})。trigger(「reloadGrid」);抱歉關於糟糕的格式。 – 2012-06-19 01:25:59

+0

data.responseText是必須被評估爲javascript對象的json數據。這將是重新加載後將顯示的新數據。 – Binaryrespawn 2012-09-07 14:39:14

6

根據文件建立的語法afterSubmit是:

afterSubmit : function(response, postdata) 
{ 
… 
return [success,message,new_id] 
} 

否則eventhough數據成功發佈IE8將拋出錯誤。

你可以使用:

return [true,'','']; 

然後closeAfterAdd:真closeAfterEdit:真將無需工作,以編程方式關閉窗體:

$('#cData').trigger('click'); 
0

你可以這樣做與在bootstrap的幫助下,將jqgrid放入div中然後用鏈接關閉div的想法服務於此目的。以下是代碼。

<div> 
<div class="alert alert-default"> 
<a href="#" id="okayMessage" class="close" data-dismiss="alert" 
aria-label="close">&times;</a> 
<br> 
    <table id="accountIdSearch" style="font-size: 11px"></table> 
     <div id="pagingDivId" style="height: 50px;"> 
     </div> 
</div> 
</div> 
+1

僅僅爲此目的添加一個像Bootstrap這樣的大型框架並沒有多大意義。 OP只使用jQuery,其他的都是猜測。試着在你的答案中反映出來。 – 2016-12-27 11:17:39