Я использую цикл for с входными тегами. Пользователь что-то вводит, и при нажатии кнопки ввода команда отправляется, а текущий цикл for запускается с другим входным тегом. Я хочу, чтобы курсор был перемещен к следующему вводу. Существует множество решений, в которых получение srcElement и перемещение фокуса на следующий элемент, но здесь следующий элемент добавляется динамически.
оболочка.component.html
<div class = "shell">
<table>
<tr *ngFor = "let text of shellText">
<ng-container *ngIf = "getType(text['type']);else input">
<td style = "width: 2%">{{text['preText']}}</td>
<td>{{text['text']}}</td>
</ng-container>
<ng-template #input>
<td style = "width: 2%">{{text['preText']}}</td>
<td><input [readonly] = "text['type'] == 'command'" class = "shell-input"
(keyup.enter) = "onEnter($event,text['line'])" [(ngModel)] = "text['text']" mat-input type = "text" /></td>
</ng-template>
</tr>
</table>
</div>
shell.component.ts
onEnter(event, line) {
if (this.shellText[line - 1].text.trim().endsWith(':')) {
this.shellText.push({ 'type': CLASSES['CONTINUE_COMMAND'], 'line': line + 1, 'preText': '', 'text': ' ' },)
} else {
this.shellText.push({ 'type': CLASSES['CURRENT_COMMAND'], 'line': line + 1, 'preText': '>>>', 'text': '' },)
}
this.shellText[line - 1]['type'] = CLASSES['COMMAND']
setTimeout(() => {
this.setFocus(event)
}, 2000);
}
setFocus(event) {
debugger
let element = event.srcElement.nextElementSibling; // get the sibling element
console.info(element)
if (element == null) // check if its null
return;
else
element.focus(); // focus if not null
}
Примечание. Я пытаюсь создать оболочку Python.
shell.component.ts
setFocusevent) {
let element = event.srcElement.parentElement.parentElement.nextElementSibling.lastElementChild.firstElementChild; // get the sibling element
if (element == null) // check if its null
return;
else
element.focus(); // focus if not null
}
<input>
<td>
<tr>
<tr>
, который будет создан динамически.<td>
<input>
и добавляете фокус
хорошо, это сработало отлично .. Мне пришлось использовать jquery, чтобы решить проблему.