我有一个使用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,""];
}
答案 0 :(得分:2)
至少有三种不同的方式可以使用搜索:Toolbar Searching,Custom Searching您使用的Single field searching或Advanced Searching共享相同的代码。因此,目前有三种不同的近距离实现方式。
只有Toolbar Searching有beforeSearch
个事件处理程序,可以返回false
来停止搜索。如果是Custom Searching,则事件处理程序beforeSearch
返回的值将不会使用。 Single field searching或Advanced 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
来停止搜索。
更新:好的!我为你准备了demo。在演示中我没有使用服务器组件,因此它不会真正进行搜索,但如果网格将被刷新并进入第1页,您可以看到结果。
要测试您可以执行以下操作的demo:
test1
,然后点击“搜索”按钮。现在grig将刷新,因为验证将正常。