需要jqGrid内联编辑才能将焦点转到单击的单元格
Need jqGrid inline editing to have focus go to clicked cell
其他人问过这个问题,但我找不到好的答案。
- 没有回答
- 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);
});
希望这对你有帮助。
相关文章:
- 单击时将焦点更改为元素
- 在没有焦点的情况下捕获画布上的第一次单击事件
- 单击其他元素或鼠标向上时隐藏输入框,但保留一次焦点
- 强制单击空链接以不移动页面焦点
- 如何在单击按钮时获得最后一个焦点文本框输入
- 移除焦点并单击event-Jquery
- 按下esc键或随机单击鼠标时,Jcrop失去焦点
- 任何防止在从 tinymce 容器中单击输入文本时失去焦点的方法
- DIV 在单击其中的元素时失去焦点
- 单击在焦点丢失之前注册的位置,但在焦点丢失后运行事件
- 如何处理单击和焦点事件以切换 .
- 如果单击焦点元素的子元素,则会在获得焦点的父元素上触发模糊事件
- 如何通过单击按钮自动打开子窗口作为焦点窗口(IE)
- CKEditor在焦点/单击时更改配置设置
- 当焦点位于文本框中时,单击上的 Jquery 不起作用
- Hammer.js 在单击叠加层并将其删除时,将焦点设置在叠加层下方的输入上
- 对焦点和单击事件的验证
- 让窗口在一次单击触发两个页面重定向后保持焦点
- 使用javascript / jquery更改元素焦点(单击)上的输入/文本区域样式表
- 无法将表单输入字段上的 JQuery UI 工具提示限制为仅在单击/焦点事件上显示