【问题标题】:Need jqGrid inline editing to have focus go to clicked cell需要 jqGrid 内联编辑才能将焦点转到单击的单元格
【发布时间】:2012-02-06 14:50:50
【问题描述】:

其他人问过这个问题,但我找不到好的答案。

使用 jqgrid 和内联编辑,是否可以将焦点放在被选中的单元格而不是行上的第一个单元格上?在onCellSelect 处理程序中,我可以移动焦点,但随后它会立即返回到该行的第一个单元格。

当我退出 onCellSelect 回调时,Firebug 一直崩溃,因此我在 jqGrid 源本身方面没有取得太大进展。

【问题讨论】:

    标签: javascript jqgrid


    【解决方案1】:

    我使用这个代码(jqGrid 4.4.1)

     onSelectRow: function (rowid, status, e) {
       var setFocusToCell = function(e) {
         if(!e || !e.target) return;
         var $td = $(e.target).closest("td"), $tr = $td.closest("tr.jqgrow"), ci, ri, rows = this.rows;
         if ($td.length === 0 || $tr.length === 0 || !rows) return;
         ci = $.jgrid.getCellIndex($td[0]);
         ri = $tr[0].rowIndex;
         $(rows[ri].cells[ci]).find("input,select").focus();
       }
       setFocusToCell(e);
    }
    

    【讨论】:

      【解决方案2】:

      我回答了关闭的问题here。如果你使用双击进入内联编辑可以直接使用我之前的答案。

      如果您使用行选择(onSelectRow 回调),您将无法检测到单击的单元格,因为当前版本的 jqGrid 没有事件对象作为参数。 github 上的最新版本 jqGrid 已经具有参数(请参阅 my suggestionthe fix),您可以在 onSelectRow 中执行相同操作。

      如果您确实需要使用已发布的 jqGrid 4.3.1 版本并且需要在 onSelectRow 回调中设置焦点,您可以另外使用 beforeSelectRow 回调将最后一个 e.target 缓存在一个变量中并在 @987654330 内部使用它@。

      【讨论】:

        【解决方案3】:

        我通过将 dblclick 事件附加到表的每个 td 以某种方式成功地实现了这一点,我知道这不是最好的方法,但你可以随意优化它,你也可以忽略使用的 setTimeout仅用于测试。

         $("#jqGrid").on("dblclick", "td", function (event) {   
                         //   setTimeout(function () {
                                console.log(this);
                                $(event.target).find("input,select").focus();                     
                          //  }, 0);
                        });
        

        希望这会对你有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多