【问题标题】:Why input element is not getting focus?为什么输入元素没有获得焦点?
【发布时间】:2019-08-15 21:57:01
【问题描述】:

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

【问题讨论】:

    标签: angular ag-grid ag-grid-ng2 ag-grid-angular


    【解决方案1】:

    您无需通过setFocusedCell 显式设置单元格焦点。

    检查我创建的这个示例 plunk:Cell Editing

    到达最后一个单元格并点击选项卡,观察input 已经聚焦。

    setTimeout(() => {
      params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
      //params.api.setFocusedCell(rowDataLength, 'make');
    });
    

    【讨论】:

    • 是的,它的工作,我也不得不将editable=true 从列定义移动到默认列定义。我不知道原因,但它正在工作。
    • 我在这里观察到,它只在 plunker 上工作。你在机器上也试过了吗?
    • 它有效。如果您错过了任何其他内容,请尝试在 plunk 上复制它
    • 无法在 plunk 上生成,因为 plunk 视口焦点停留在窗口中。我复制了所有代码并在机器上运行它,它没有关注最后一个选项卡。但是当我将按钮元素放在网格指令下方时,它开始关注最后一列。奇怪但它有效,我只需要找到一些理由为什么我需要在网格下方放置一些额外的元素。
    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2013-04-22
    相关资源
    最近更新 更多