在提交使用JQGrid中的filterGrid生成的搜索表单之前进行验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在提交使用JQGrid中的filterGrid生成的搜索表单之前进行验证相关的知识,希望对你有一定的参考价值。

我有一个使用JqGrid中的filterGrid选项生成的搜索表单。我想添加一个在提交搜索表单之前调用的javascript逻辑。我添加了一个方法,该方法由filterGrid的beforeSubmit属性调用。它在提交之前进入方法,但无论返回的值如何,始终都会提交表单。如果javascript返回false,我希望表单不提交。

你们中的任何人之前都有过类似的东西。或者还有其他更好的方法来实现这一点。任何有关这方面的帮助将非常感激。

码:

$("#search").filterGrid("#resultsGrid",
                        {gridModel:true,gridNames:true,enableSearch:true,
                         formtype:"vertical",buttonclass:"submitButton",
                         enableClear:true,beforeSearch:validateDate});

function validateDate(dateDiff) {
    if(daysDiff < 0){
        return [false,"Message"];
    }
    } // ??? (commented by Oleg)
    return [true,""];
}
答案

搜索可以使用至少三种不同的方式:Toolbar SearchingCustom SearchingSingle field searchingAdvanced Searching共享相同的代码。因此,目前有三种不同的近距离实现方式。

只有Toolbar SearchingbeforeSearch事件处理程序,可以返回false停止搜索。在Custom Searching的情况下,事件处理程序beforeSearch返回的值将不会被使用。 Single field searchingAdvanced Searching在搜索之前不会调用任何事件处理程序。在所有情况下,搜索将搜索过滤器和jqGrid参数search设置为true然后强制网格重新加载代码,如

$("#gridId").trigger("reloadGrid",[{page:1}]);

为了能够进行任何验证并停止重新加载网格,我认为没有简单的方法。所以我建议只关注。

您可以覆盖标准的reloadGrid事件处理程序并将其链接起来。相应的代码如下所示:

var grid = $("#gridId");
var events = grid.data("events"); // read all events bound to 
var originalReloadGrid; // here we will save the original event handle
var skipRefresh = false; // this can be changed by owe validation function
// Verify that one reloadGrid event hanler is set. It is typical sitation
if (events && events.reloadGrid && events.reloadGrid.length === 1) {
    originalReloadGrid = events.reloadGrid[0].handler; // save old
    grid.unbind('reloadGrid');
    var newEvents = grid.data("events");
    grid.bind('reloadGrid', function(e,opts) {
        if (!skipRefresh && grid[0].p.search) {
            originalReloadGrid(e,opts);
        }
    });
}

可能我稍后会创建一个演示,演示一个示例,并在此处放置演示链接。此外,我将尝试建议对jqGrid进行代码更改,以便在所有不同的搜索实现中都可以通过false事件句柄返回beforeSearch来停止serching。

更新:好的!我为你准备了一个demo。在演示中我没有使用服务器组件,因此它不会真正进行搜索,但如果网格将被刷新并进入第1页,您可以看到结果。

要测试demo,您可以执行以下操作:

  1. 在“客户端”输入字段中键入一个不以“test”开头的文本,然后单击“搜索”按钮。您会收到一个模拟验证对话框的警报。
  2. 在“客户端”输入字段中键入一个以“test”开头的文本,如test1,然后单击“搜索”按钮。现在grig将刷新,因为验证将是正常的。

以上是关于在提交使用JQGrid中的filterGrid生成的搜索表单之前进行验证的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid 设置隔行换色

jQuery - jqGrid - 在每一行提交按钮

在 jqGrid 中,您可以一次内联编辑多行然后进行一次提交吗?

在 jqGrid 列中加载图像

jqgrid使用生成表格

无法绑定 jqGrid 列