jqGrid搜索延迟

时间:2012-10-04 13:15:19

标签: javascript jquery jqgrid

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

1 个答案:

答案 0 :(得分:3)

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

如果您检查filterToolbar的源代码,您会发现使用searchOnEnter选项的the following lines

$("input",thd).keydown(function(e){
    var key = e.which;
    switch (key) {
        case 13:
            return false;
        case 9 :
        case 16:
        case 37:
        case 38:
        case 39:
        case 40:
        case 27:
            break;
        default :
            if(timeoutHnd) { clearTimeout(timeoutHnd); }
            timeoutHnd = setTimeout(function(){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-view")
    .find(".ui-jqgrid-hdiv .ui-search-toolbar input[type=text]")
    .keydown(function (e) {
        var key = e.which;
        if (key === k.ENTER) {
            return false;
        }
        if ($.inArray(key, toSkip) < 0) {
            if (timeoutHnd) {
                clearTimeout(timeoutHnd);
                timeoutHnd = 0;
            }
            timeoutHnd = setTimeout(function () {
                $grid[0].triggerToolbar();
                timeoutHnd = 0;
            }, 3000);
        }
    });

Here是相应的演示:

enter image description here

更新: Free jqGrid jqGrid的分支支持autosearchDelay的{​​{1}}选项(默认值为500),可与{{1}组合使用}(这是默认值)和filterToolbar。因此,不需要上述技巧。可以使用

autosearch: true