jqgrid中的自动完成文本框显示错误,项目未定义

autocomplete textbox within jqgrid shows error, item is undefined

本文关键字:显示 错误 未定义 项目 文本 jqgrid      更新时间:2023-09-26

jqgridgrid中的一个列在编辑模式期间包含一个自动完成的文本框。自动完成与ajax调用正确连接,以获取自动完成的数据。

当使用鼠标从自动完成列表中选择一个项目时,选择工作正确,不会抛出错误。然而,当我使用键盘向下箭头选择一个项目,然后按回车键,该项目没有被选中,事实上jquery。自动完成的UI插件抛出错误,声明项目未定义。

这里的问题是,jqgrid编辑完成事件和自动完成选择事件都在监听回车键,jqgrid编辑完成事件在jquery之前触发。UI自动完成的选择事件,因此编辑单元格关闭编辑和jquery的选择事件。UI自动完成插件没有接收选中的项,因此我们得到错误项未定义。

谁能建议如何确保编辑完成事件和自动完成事件完成成功没有短路,目前正在发生与jqgrid的编辑完成事件????

在我看来,最简单的方法是在调用autocomplete之前,dataInit 内部解绑定 keydown(调用.unbind("keydown"))。您应该管理自己输入Esc键强制放弃或保存编辑

我通过在afterCellEdit Event中使用以下代码修复了此问题:

     var cellDOM = this.rows[iRow].cells[iCol], oldKeydown,
     $cellInput = $('input, select, textarea', cellDOM),oldKeydown,
        events = $cellInput.data('events');
    if (events && events.keydown && events.keydown.length) {
        oldKeydown = events.keydown[0].handler;
        $cellInput.unbind('keydown', oldKeydown);
        $cellInput.bind('keydown', function (e) {
            setTimeout(function () {
                oldKeydown.call(this, e);
            }, 100);
        });
    }
};

实际上,我在单元格的KeyDown处理程序中添加了一个延迟,使它在大约100毫秒后触发,这允许AutoComplete选择事件接收项目,并成功完成其"选择"事件。