2017-09-15 103 views
-3

我正在使用jqgrid 4.5.2版本与Jquery-3.2.1。beforeSubmit事件自定义按钮上的自定义形式的jqgrid不起作用

在jqgrid中,代替编辑按钮(添加,编辑和删除)自定义(添加,编辑和删除)按钮被实现。现在点击自定义添加/编辑按钮打开一个自定义窗体。以下是自定义按钮的onclick事件。

这意味着我们用我们自己的自定义窗体替换了jqgrid的默认编辑/添加窗体。之前我们用beforeSubmit事件写了一些验证,这些验证使用jqgrid的默认(添加/编辑)形式正常工作。现在我想对替换的自定义表单应用相同的验证。

function(myGrid){ 
    myGrid.getGridParam('dataGrid').openEditFormIndicator(); 
}(myGrid) 

该自定义窗体具有自定义提交和取消按钮。现在我想添加beforeSubmit事件到这个提交按钮。由于表单是自定义的,jqgrids默认的beforeSubmit事件不起作用。

添加/编辑表单是由我们自己的构建在Java上的框架构建的。这些表格完全独立于jqgrid。我只是从jqgrid行获得id(双击或单击编辑按钮)并将其传递给模板,该模板从db中获取数据并形成行编辑表单。如果传递的id为空或者没有在数据库中找到,则使用相同的模板形成一个空的(添加)表单。

DataGrid.prototype.openEditFormIndicator = function() { 
var id = this.grid.getGridParam('selrow') 
if(!id) { 
    var gridId = this.grid.attr('id'); 
    var idSelector = "#alertmod_" + gridId; 
    $.jgrid.viewModal(idSelector, { 
     gbox: "#gbox_" + $.jgrid.jqID(gridId), 
     jqm: true 
    }); 
    $(idSelector).find(".ui-jqdialog-titlebar-close").focus(); 
} 
else { 
    //openInteractiveForm('form_plugin_examples',this.options.formIndicatorId,'id',id,'true'); 
    var encodedPkId = encodeURIComponent(id); 
    this.openFormIndicator('Id:' + encodedPkId + ',pkId:' + encodedPkId + ',Search:id%3A' + encodedPkId + ',IndicatorId:' + this.options.formIndicatorId + ',Debug:true' + ',FilterField:id,FilterValue:' + encodedPkId); 
    // TODO width, length, position 
} 
}; 

DataGrid.prototype.openFormIndicator = function(optionsStr) { 
    DialogBoxEdit.newWindow(this.options.formIndicatorId, optionsStr); 
}; 

通过以上两个函数,在DialogBoxEditHandler.js中添加/编辑窗体。 js内部调用一个模板来创建表单。

创建的表单包含以下两个按钮,为此我需要添加beforeSubmit事件。

<Button id="lnk-close" onclick="closeDialogBoxControl($(this).closest('form'));" class="btn-default">Close</Button> 
<Button id="lnk-submit" onclick="save_form_data($(this).closest('form'),true,'72');MD.ui.reloadGrid();" class="btn-primary ui-dialog-close">Save</Button> 
+2

如果您希望在此问题上获得帮助,则需要提供代码。 –

+0

@AnteJablanAdamović:这是一个普遍的问题。我没有遇到任何与我写的代码有关的问题。这是一个新的实现,并没有找到任何帮助谷歌。相信我的问题解释了我需要的东西。 – santoshM

+0

它没有,没有看到你的代码,我们不知道你如何约束beforeSubmit事件,因此我们无法帮助你。 –

回答

1

看来你第二次提出这个问题。文档this is here

基本上在这种情况下,您将需要定义该事件并返回适当的数组。使用中的链接提供的帮助,当你点击一个onclick事件,你可以做这个定义的自定义按钮:

... 
jQuery("#grid_id").jqGrid('editGridRow', rowid, { 
    ... 
    beforeSubmit : function(postdata, formid) { 
     if(someconditionOK) { 
      return [true,'']; 
     } else { 
      return [false,'Error submiting data']; 
     } 
    }, 
    ... 
}); 
+0

谢谢@TonyTomov,现在很清楚。我的情况完全不同。添加/编辑表单是由我们自己的基于Java构建的框架构建的。这些表格完全独立于jqgrid。我只是从jqgrid行获取id并将其传递给模板,该模板从db中提取数据并形成行编辑表单。如果传递的id为空或在数据库中未找到,则使用相同的模板形成空的表单。没有找到任何正确的方式,并感觉不可能让我的自定义形式与jqgrid内联。因此,计划在js中使用onclick动作提交绑定的验证之前提交。 – santoshM

+0

如果您使用自定义表单,那么您自然需要在提交数据之前使用自定义事件。您可以使用jqGrid表单编辑中的构建。请参阅我的答案中提供的文档,以获得上面示例代码中描述的替代解决方案。 –

+0

感谢@TonyTomov,非常抱歉,我无法理解您最后一条评论中的该行(“您可以在jqGrid表单编辑中使用该构建。”)。我想总结这个问题如下:我们没有使用jgGrid的编辑功能,正如我上面提到的那样,jqGrid仅用于列出数据。现在,当我将更改提交给服务器时,jqGrid完全不知道。 jqgrid唯一能做的就是显示db上的数据。 – santoshM

0

如果我们要使用beforeSubmit情况下,我们必须使用建立表单编辑 - 在所有其他情况下,事件将不起作用 - 在使用我们自己的编辑表单的情况下,我们需要在提交之前编写我们自己的定制。