0

我有一个包含一些数据的 JQgrid,并且启用了工具栏搜索选项。我想知道是否有办法告诉工具栏在输入最后一个字符后 2 或 3 秒触发,或者在用户按下回车键时触发。搜索文档 wiki 没有结果。任何的想法?

4

2 回答 2

3

如果您检查将在使用searchOnEnter: false选项的情况下使用的 jqGrid 代码(请参见此处),您将看不到管理超时的选项,之后将自动开始搜索。超时始终为 500 毫秒(半秒)。因此,如果您需要另一个超时,则必须在自定义代码中实现相同的行为。您可以注册自己的keydown处理程序,它与选项做相同的searchOnEnter: false事情,但有另一个超时。例如

var $grid = $("#grid"), hTimeout;
$grid.jqGrid('filterToolbar', {defaultSearch: "cn", stringResult: true});
$grid.closest(".ui-jqgrid-view")
    .find(">.ui-jqgrid-hdiv .ui-search-toolbar th input")
    .keydown(function (e) {
        var uiKeyCode = $.ui.keyCode,
            keyCode = e.keyCode || e.which;

        if (keyCode === uiKeyCode.ENTER) {
            return false;
        }

        if (keyCode === uiKeyCode.PAGE_UP  || keyCode === uiKeyCode.PAGE_DOWN ||
                keyCode === uiKeyCode.END  || keyCode === uiKeyCode.HOME ||
                keyCode === uiKeyCode.UP   || keyCode === uiKeyCode.DOWN ||
                keyCode === uiKeyCode.LEFT || keyCode === uiKeyCode.RIGHT) {

            return;
        }

        if (hTimeout) {
            clearTimeout(hTimeout);
        }
        hTimeout = setTimeout(function () {
            $grid[0].triggerToolbar();
            hTimeout = undefined;
        }, 3000); // start searching with 3 sec timeout
    });

请参阅演示

于 2013-02-26T15:25:21.887 回答
0

在 colModel 中,您可以将 searchoptions 设置为自定义函数,例如:

searchoptions: {dataInit: function (elem) { AutoOrAfterEnterSearch(elem) }} ... 

然后,您可以构建事件处理程序以在一段时间后或按下 Enter 键时触发搜索 Ex if (e.keyCode == 13) { SearchFunction() };,每次按键您都需要重置计时器。这不是解决方案的完整代码,但这应该是正确的路径。我个人使用它来为搜索工具栏构建一个自动完成功能(这可能比我认为的定时搜索更好)

于 2013-02-26T14:07:20.137 回答