Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 提交在JQGrid中使用filterGrid生成的搜索表单之前进行验证_Search_Jqgrid - Fatal编程技术网

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

Search 提交在JQGrid中使用filterGrid生成的搜索表单之前进行验证,search,jqgrid,Search,Jqgrid,我使用JqGrid中的filterGrid选项生成了一个搜索表单。我想添加一个JavaScript逻辑,在提交搜索表单之前调用它。我为filterGrid添加了一个由beforeSubmit属性调用的方法。它在提交之前进入方法,但始终提交表单,而不管返回的值如何。如果javascript返回false,我希望表单不要提交 你们中有谁以前实现过类似的东西吗。或者有没有其他更好的方法来实现这一点。在此方面的任何帮助都将不胜感激 代码: $(“#搜索”).filterGrid(“#结果网格”, {gr

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

你们中有谁以前实现过类似的东西吗。或者有没有其他更好的方法来实现这一点。在此方面的任何帮助都将不胜感激

代码:

$(“#搜索”).filterGrid(“#结果网格”,
{gridModel:true,gridNames:true,enableSearch:true,
formtype:“垂直”,按钮类别:“submitButton”,
enableClear:true,beforeSearch:validateDate});
函数validateDate(dateDiff){
如果(daysDiff<0){
返回[假,“消息”];
}
} // ??? (奥列格评论)
返回[真,“];
}

使用搜索的方式至少有三种:您使用的方式和/或共享相同代码的方式。因此,目前有三种不同的close things实现

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

$("#gridId").trigger("reloadGrid",[{page:1}]);
为了能够进行任何验证并停止重新加载网格,我认为没有简单的方法。因此,我建议只做以下几点

您可以覆盖标准的
reloadGrid
事件处理程序和它。相应的代码con如下所示:

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
by
beforeSearch
事件句柄来停止搜索

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

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

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);
        }
    });
}
  • 在“客户端”输入字段中键入不以“测试”开头的文本,然后单击“搜索”按钮。您将收到模拟验证对话框的警报
  • 在“客户端”输入字段中键入以“test”开头的文本,如
    test1
    ,然后单击“搜索”按钮。现在grig将刷新,因为验证将正常

  • 非常感谢你的帮助。你有我可以参考的例子吗?谢谢你抽出时间来制作这个演示。谢谢你的帮助。谢谢