我刚刚遇到您的问题,因为我有类似的要求。我需要转到下一行并根据键盘快捷键将第一个单元格设置为可编辑(在此示例中说 shift+z)。最终用户在此表中输入了大量数据,因此“请不要单击鼠标来减慢该过程”是他们的要求之一。这就是我实现它的方式。
将 id 添加到表格单元格并将 keydown 事件添加到编辑器
<p-table [value]="rowDatas" selectionMode="single" [(selection)]="selectedRowData">
<ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
<tr [pSelectableRow]="rowData">
<td pEditableColumn id="hours{{rowIndex}}">
<p-cellEditor>
<ng-template pTemplate="input">
<input id="{{'hours' + rowIndex}}" pInputText type="text"
[(ngModel)]="rowData.hours" (keydown.shift.z)="goNextRow($event,'hours', rowIndex)">
</ng-template>
<ng-template pTemplate="output">
{{rowData.hours}}
</ng-template>
</p-cellEditor>
</td>
<td pEditableColumn id="minutes{{rowIndex}}">
<p-cellEditor>
<ng-template pTemplate="input">
<input id="{{'minutes' + rowIndex}}" pInputText type="text"
[(ngModel)]="rowData.minutes" (keydown.shift.z)="goNextRow($event,'hours', rowIndex)">
</ng-template>
<ng-template pTemplate="output">
{{rowData.minutes}}
</ng-template>
</p-cellEditor>
</td>
<td pEditableColumn id="seconds{{rowIndex}}">
<p-cellEditor>
<ng-template pTemplate="input">
<input id="{{'seconds' + rowIndex}}" pInputText type="text"
[(ngModel)]="rowData.seconds" (keydown.shift.z)="goNextRow($event,'hours', rowIndex)">
</ng-template>
<ng-template pTemplate="output">
{{rowData.seconds}}
</ng-template>
</p-cellEditor>
</td>
</ng-template>
脚本转到下一行。如果没有下一行,则转到第一行。
goNextRow(event, columnName:string, index: number = 0) {
event.stopPropagation();
let element: HTMLElement = document.getElementById((columnName + (index + 1).toString())) as HTMLElement;
if (element == undefined || element == null) {
element = document.getElementById((columnName + (0).toString())) as HTMLElement;
}
element.click();
}
然后通过 id 和 index 引用您要编辑的单元格。在这种情况下,无论我是在编辑小时、分钟还是秒,我都想转到下一行的小时列(第一列)。
(keydown.shift.z)="goNextRow($event,'hours', rowIndex)"
但您可以将小时更改为任何其他单元格,即下一行的分钟列
(keydown.shift.z)="goNextRow($event,'minutes', rowIndex)"
基本上,它会触发表格单元格上的点击事件,使其可编辑。