Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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
Javascript jqGrid搜索延迟_Javascript_Jquery_Jqgrid - Fatal编程技术网

Javascript jqGrid搜索延迟

Javascript jqGrid搜索延迟,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我使用jqGrid的过滤器工具栏,并选择searchOnEnter:false。我在字段中输入一些文本后,它立即发送请求。在我的应用程序中,当用户输入他想要的文本时最好等待,当他停止输入时再搜索。那么,jqGrid是否可以在请求发送到服务器之前增加延迟?这是一个正确的问题,但jqGrid没有选项在应用自动搜索之前指定超时。它总是500毫秒 如果检查filterToolbar的源代码,您将找到使用searchoneter选项的源代码 $(“输入”,thd).按键(功能(e){ var-key=e.

我使用jqGrid的过滤器工具栏,并选择searchOnEnter:false。我在字段中输入一些文本后,它立即发送请求。在我的应用程序中,当用户输入他想要的文本时最好等待,当他停止输入时再搜索。那么,jqGrid是否可以在请求发送到服务器之前增加延迟?

这是一个正确的问题,但jqGrid没有选项在应用自动搜索之前指定超时。它总是500毫秒

如果检查
filterToolbar
的源代码,您将找到使用
searchoneter
选项的源代码

$(“输入”,thd).按键(功能(e){
var-key=e.which;
开关(钥匙){
案例13:
返回false;
案例9:
案例16:
案例37:
案例38:
案例39:
案例40:
案例27:
打破
违约:
if(timeoutHnd){clearTimeout(timeoutHnd);}
timeoutHnd=setTimeout(函数(){triggerToolbar();},500);
}
});
因此,您可以将几乎相同的代码与默认的
searchOnEnter:false
选项一起使用,并在需要的超时后手动实现调用
triggerToolbar
。例如,在搜索工具栏中键入后,以下代码片段在3秒(3000毫秒)超时后开始搜索:

var timeoutHnd,k=$.ui.keyCode,
toSkip=[k.TAB,k.SHIFT,k.ALT,k.ESCAPE,k.LEFT,k.UP,k.RIGHT,k.DOWN,k.HOME,k.END,k.INSERT];
$grid.jqGrid(“filterToolbar”,{defaultSearch:cn});
$grid.closest(“.ui jqgrid视图”)
.find(“.ui jqgrid hdiv.ui搜索工具栏输入[type=text]”)
.keydown(功能(e){
var-key=e.which;
如果(键===k.ENTER){
返回false;
}
如果($.inArray(键,toSkip)<0){
如果(超时HND){
clearTimeout(timeoutHnd);
timeoutHnd=0;
}
timeoutHnd=setTimeout(函数(){
$grid[0]。triggerToolbar();
timeoutHnd=0;
}, 3000);
}
});
是相应的演示:

更新:jqGrid的fork支持
filterToolbar
autosearchDelay
选项(默认值为500),该选项可与
autosearch:true
(默认值)和
searchOneNet:false
结合使用。因此,不需要上述技巧。可以用

$grid.jqGrid("filterToolbar", {
    searchOnEnter: false,
    autosearchDelay: 3000 // 3 sec
});

当从服务器获取数据时,这不起作用。我试过你的代码,如果使用服务器端数据,它就不起作用。尽管如此,如果数据是本地的(如您的示例中所示),那么这种方法可以很好地工作。有没有办法改变远程获取数据时的延迟?@user2435860:首先:到底什么“不起作用”。秒:你到底做了什么?你使用了jqGrid的哪个版本和分支?这是我开发的叉子。它具有
autosearchDelay
选项
filterToolbar
,可与
autosearch:true
结合使用。因此,您可以使用
{autosearch:true,autosearchDelay:3000}
作为
filterToolbar
的选项。它适用于任何
数据类型。我正在加载数据并使用服务器端处理对其进行操作,并添加了一个过滤器选项。问题是我无法像您那样更改设置超时的延迟。它不能处理来自服务器的数据。我的问题是我处理大量数据,500毫秒的延迟是不够的,因为之后jqgrid会被锁定,直到获取新的过滤数据,这会锁定我的web应用程序。我正试图找到一种方法来停止triggerToolbar(),但直到现在都没有成功。你有什么建议吗?@user2435860:我建议你升级到免费的jqGrid 4.12.1。您可以通过将URL从CDN更改为URL来测试它,如中所述。它可以从最著名的存储库获得:npm、bower、NuGet、WebJars,请参阅。只有当您现在无法升级时,您才应该验证您没有使用
searchOnEnter:false
,并在代码中实现
keydown
。@user2435860:抱歉,但我之前写过您:验证您没有使用
searchOnEnter:false