【问题标题】:autocomplete textbox within jqgrid shows error, item is undefinedjqgrid中的自动完成文本框显示错误,项目未定义
【发布时间】:2014-07-29 11:04:13
【问题描述】:

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

当使用鼠标选择自动完成列表中的项目时,选择可以正常工作,不会引发错误。 但是,当我使用键盘向下箭头选择一个项目然后按 Enter 键时,该项目没有被选中,并且用于自动完成的 jquery.ui 插件实际上会引发错误,说明项目未定义。

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

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

【问题讨论】:

    标签: javascript jquery jquery-ui jqgrid autocomplete


    【解决方案1】:

    在我看来,最简单的方法是 unbind keydown(调用.unbind("keydown"))在dataInit 之前你调用autocomplete。您应该管理自己的 EnterEsc 键以强制放弃或保存编辑。

    【讨论】:

    • 其实我想做gridcell.unbind("keydown")。但在 dataInit 函数中,我无法获得对 gridCell 的引用。如何获得对 gridCell 的引用???
    【解决方案2】:

    我通过在 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 选择事件接收项目并成功完成其“选择”事件。

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多