Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dojo Dgrid将焦点设置在单元格上_Dojo_Dgrid - Fatal编程技术网

Dojo Dgrid将焦点设置在单元格上

Dojo Dgrid将焦点设置在单元格上,dojo,dgrid,Dojo,Dgrid,我使用dgrid以网格格式显示数据,它有四列。所有都是可编辑的 我已经用下面的方式申报了 身份证件 名称 描述 我的问题是,当我编辑第一列时,编辑后应该将焦点设置在第二列上,并在该单元格中显示光标,以便我可以开始编辑第二列;第三列也是如此 我对dojo和dgrid非常陌生。我在sitepen上找到了一些API,但无法解决我的问题 请在这方面帮助我首先有dgrid/Grid::edit(cell)方法 我使用dojo/aspect::after向编辑器小部件(例如dijit/form/Text

我使用dgrid以网格格式显示数据,它有四列。所有都是可编辑的

我已经用下面的方式申报了


身份证件
名称
描述
我的问题是,当我编辑第一列时,编辑后应该将焦点设置在第二列上,并在该单元格中显示光标,以便我可以开始编辑第二列;第三列也是如此

我对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];}