2012-01-31 441 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