为什么输入元素没有获得焦点?
Why input element is not getting focus?
我在 angular 项目中使用 ag-grid 社区版。要求是在选项卡上启用内联编辑,已实现,但还有另一个要求,即当通过选项卡导航并到达最后一列并再次按下 tab 键时,它应该创建一个空行并将焦点放在新行的第一个元素上出色地。我能够通过 ag-grid 函数 setRowData(data) 推送新数据。
我尝试了在网格 api 中可用的 startEditingCell() 和 setFocusedCell()。他们确实关注元素,但输入元素中的光标没有出现。
import {
Component, OnInit
} from '@angular/core';
import {GridOptions, StartEditingCellParams} from "ag-grid-community";
@Component({
selector: 'app-angular-grid',
templateUrl: './angular-grid.component.html',
styleUrls: ['./angular-grid.component.css']
})
export class AngularGridComponent implements OnInit {
gridOptions:GridOptions;
constructor() {
}
ngOnInit() {
this.initializeGridOption();
}
initializeGridOption() {
this.gridOptions = {
onGridReady: (params)=> {
params.api.sizeColumnsToFit();
},
rowData: this.rowData,
columnDefs: this.columnDefs,
rowSelection: 'multiple',
onCellEditingStopped: function (params) {
let rowIndex = params.rowIndex;
let rowDataLength = this.rowData.length;
let colId = params.column.getColId();
if (rowDataLength === rowIndex + 1 && colId === 'price') {
let data = {id: this.rowData.length + 1, make: '', model: '', price: ''};
this.rowData.push(data);
params.api.setRowData(this.rowData);
setTimeout(() => {
params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
params.api.setFocusedCell(rowDataLength, 'make');
});
}
}
};
}
columnDefs = [
{
headerName: '',
width: 40
},
{headerName: 'Make', field: 'make', editable: true},
{headerName: 'Model', field: 'model', editable: true},
{
headerName: 'Price',
field: 'price',
editable: true
}
];
rowData = [
{id: 1, make: 'Toyota', model: 'Celica', price: 35000},
{id: 2, make: 'Ford', model: 'Mondeo', price: 32000},
{id: 3, make: 'Porsche', model: 'Boxter', price: 72000}
];
}
您不需要通过 setFocusedCell
明确设置单元格焦点。
检查我创建的这个示例 plunk:Cell Editing
到达最后一个单元格并点击 Tab 键,观察 input
已经聚焦。
setTimeout(() => {
params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
//params.api.setFocusedCell(rowDataLength, 'make');
});
我在 angular 项目中使用 ag-grid 社区版。要求是在选项卡上启用内联编辑,已实现,但还有另一个要求,即当通过选项卡导航并到达最后一列并再次按下 tab 键时,它应该创建一个空行并将焦点放在新行的第一个元素上出色地。我能够通过 ag-grid 函数 setRowData(data) 推送新数据。
我尝试了在网格 api 中可用的 startEditingCell() 和 setFocusedCell()。他们确实关注元素,但输入元素中的光标没有出现。
import {
Component, OnInit
} from '@angular/core';
import {GridOptions, StartEditingCellParams} from "ag-grid-community";
@Component({
selector: 'app-angular-grid',
templateUrl: './angular-grid.component.html',
styleUrls: ['./angular-grid.component.css']
})
export class AngularGridComponent implements OnInit {
gridOptions:GridOptions;
constructor() {
}
ngOnInit() {
this.initializeGridOption();
}
initializeGridOption() {
this.gridOptions = {
onGridReady: (params)=> {
params.api.sizeColumnsToFit();
},
rowData: this.rowData,
columnDefs: this.columnDefs,
rowSelection: 'multiple',
onCellEditingStopped: function (params) {
let rowIndex = params.rowIndex;
let rowDataLength = this.rowData.length;
let colId = params.column.getColId();
if (rowDataLength === rowIndex + 1 && colId === 'price') {
let data = {id: this.rowData.length + 1, make: '', model: '', price: ''};
this.rowData.push(data);
params.api.setRowData(this.rowData);
setTimeout(() => {
params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
params.api.setFocusedCell(rowDataLength, 'make');
});
}
}
};
}
columnDefs = [
{
headerName: '',
width: 40
},
{headerName: 'Make', field: 'make', editable: true},
{headerName: 'Model', field: 'model', editable: true},
{
headerName: 'Price',
field: 'price',
editable: true
}
];
rowData = [
{id: 1, make: 'Toyota', model: 'Celica', price: 35000},
{id: 2, make: 'Ford', model: 'Mondeo', price: 32000},
{id: 3, make: 'Porsche', model: 'Boxter', price: 72000}
];
}
您不需要通过 setFocusedCell
明确设置单元格焦点。
检查我创建的这个示例 plunk:Cell Editing
到达最后一个单元格并点击 Tab 键,观察 input
已经聚焦。
setTimeout(() => {
params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
//params.api.setFocusedCell(rowDataLength, 'make');
});