需要jqGrid内联编辑才能将焦点转到单击的单元格

Need jqGrid inline editing to have focus go to clicked cell

本文关键字:焦点 单击 单元格 jqGrid 编辑 需要      更新时间:2023-09-26

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

  • 没有回答
  • Oleg双击单元格

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

当我退出onCellSelect回调时,Firebug总是崩溃,所以我在jqGrid源代码本身方面没有取得太大进展。

我使用此代码(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);
}

我回答了这里的最后一个问题。如果你在内联编辑中使用双击输入,你可以直接使用我以前的答案。

如果您使用行的选择(onSelectRow回调),您将无法检测被单击的单元格,因为当前版本的jqGrid没有事件对象作为参数。github上的jqGrid的最后一个版本已经有了参数(请参阅我的建议和修复程序),您可以在onSelectRow中执行同样的操作。

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

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

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

希望这对你有帮助。