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

时间:2014-07-29 11:04:13

标签: javascript jquery jquery-ui jqgrid autocomplete

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

当使用鼠标选择自动完成列表中的项目时,选择正常,不会抛出任何错误。 但是,当我使用键盘向下箭头选择项目然后按回车键时,该项目不会被选中,实际上自动完成的jquery.ui插件会引发错误,说明项目未定义。

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

任何人都可以建议如何确保编辑完成事件和自动完成事件都成功完成,而没有jqgrid编辑完成事件当前发生的短路。????

2 个答案:

答案 0 :(得分:0)

在我看来,最简单的方式是取消绑定 keydown(在.unbind("keydown") 之前调用dataInit} 你打电话给autocomplete。您应该自己管理 Enter Esc 键,以强制放弃或保存编辑。

答案 1 :(得分:0)

我在afterCellEdit事件中使用以下代码解决了这个问题:

     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 select事件接收该项目,并成功完成其“select”事件。