Dojo Dgrid将焦点设置在单元格上
我使用dgrid以网格格式显示数据,它有四列。所有都是可编辑的 我已经用下面的方式申报了Dojo Dgrid将焦点设置在单元格上,dojo,dgrid,Dojo,Dgrid,我使用dgrid以网格格式显示数据,它有四列。所有都是可编辑的 我已经用下面的方式申报了 身份证件 名称 描述 我的问题是,当我编辑第一列时,编辑后应该将焦点设置在第二列上,并在该单元格中显示光标,以便我可以开始编辑第二列;第三列也是如此 我对dojo和dgrid非常陌生。我在sitepen上找到了一些API,但无法解决我的问题 请在这方面帮助我首先有dgrid/Grid::edit(cell)方法 我使用dojo/aspect::after向编辑器小部件(例如dijit/form/Text
身份证件
名称
描述
我的问题是,当我编辑第一列时,编辑后应该将焦点设置在第二列上,并在该单元格中显示光标,以便我可以开始编辑第二列;第三列也是如此
我对dojo和dgrid非常陌生。我在sitepen上找到了一些API,但无法解决我的问题
请在这方面帮助我首先有
dgrid/Grid::edit(cell)
方法
我使用dojo/aspect::after
向编辑器小部件(例如dijit/form/TextBox
)添加一个事件侦听器,如果它不存在,则在我的case选项卡中为特定键侦听keypress
事件,然后调用grid.edit(cell)
,使用下一步应该编辑的单元格
请参阅JSFIDLE上的一个工作示例:
它还远未完成,但至少可以提供一个可能的方向。使用双击进行编辑,编辑时按TAB键跳转到以下单元格
aspect.after(grid, "edit", function(promise, cellNode) {
if(promise === null) return;
promise.then(function(widget) {
if (!widget._editorKeypressHandle) {
widget._editorKeypressHandle = widget.on("keypress", function(e) {
for (var rowId in grid.selection) { break;}
for (var columnId in grid.selection[rowId]) { break;}
if(e.charOrCode == keys.TAB) {
e.preventDefault();
var cellEdited = grid.cell(rowId, columnId);
var cellToEdit = grid.right(cellEdited, 1);
if(cellEdited.row.id == cellToEdit.row.id
&& cellEdited.column.id == cellToEdit.column.id
) {
// go to next line
for(var firstColumnId in grid.columns) { break;}
var nextRow = grid.down(cellEdited.row, 1);
cellToEdit = grid.cell(nextRow, firstColumnId);
};
grid.deselect(cellEdited);
grid.select(cellToEdit);
grid.edit(cellToEdit);
}
})
}
});
});
这是另一个选择。还包括解决旧版本dgrid中文本选择错误的方法
后创建:函数(){
var=这个;
这是继承的(论点);
//修复dgrid中导致网格丢失的解决方法错误
//每次保存后聚焦。
此.on('dgrid-datachange',函数(evt){
that.\u selectedCell=that.cell(evt);
});
aspect.after(此“保存”功能(dfd){
然后(函数(){
var nextCell=that.right(that.cell(that.\u selectedCell.row.id,that.\u selectedCell.column.id));
编辑(nextCell);
//修复了dgrid错误,该错误阻止了要在焦点上选择的字段文本。
nextCell.element.widget&&nextCell.element.widget.textbox&&nextCell.element.widget.textbox.select();
});
});
}
我知道回复有点晚,但几天前我在IE上测试了你的解决方案,它不起作用。我试图调查这个问题,但grid.right函数存在一些错误。有什么线索吗?对我不管用。我尝试在dijit/Grid.js中的声明中使用它。我得到的对象不支持属性或方法'after'
。是否包含dojo/aspect?是的。这不是问题所在。检查aspect
显示function(name){return isFunction(hasCache[name])?(hasCache[name]=hasCache[name](全局、文档、元素)):hasCache[name];}