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

时间:2012-02-06 14:50:51

标签: javascript jqgrid

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

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

当我退出onCellSelect回调时,Firebug一直崩溃,所以我没有在jqGrid源本身取得很大进展。

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

如果使用行(onSelectRow回调)的选择,则检测单击的单元格会有问题,因为当前版本的jqGrid没有将事件对象作为参数。 github上的jqGrid的最后一个版本已经包含参数(请参阅my suggestionthe fix),您可以在onSelectRow内执行相同操作。

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

答案 2 :(得分:0)

我以某种方式通过将dblclick事件附加到表的每个td来成功完成此操作,我知道这不是最好的方法,但您可以随意优化它,您也可以忽略使用的setTimeout仅用于测试。

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

希望这会对你有所帮助。