То, как вы используете this.$nextTick();
, неверно. Вы должны передать ему функцию обратного вызова.
this.$nextTick(function () {
this.$refs["input_" + id].focus()
})
https://jsfiddle.net/un65e9oc/7/
Однако я не уверен, как этот доступ к массиву работает для вас, потому что, как я заметил, $refs
- это объект, ключи которого ссылаются на имя ссылки.
[Редактировать: Благодаря комментарию @ Фила, выше ясно.]
Выше приведено правильное решение вашей проблемы. Поскольку у вас уже есть этот ответ, я добавлю что-то другое.
Причина, по которой вы видите такое поведение, заключается в том, что ссылка, которую вы держите в $refs
, не обновляется при изменении видимости текстового поля в вашем методе showInput()
. Поэтому, когда вы вызываете this.$refs["input_" + id].focus();
, он пытается установить focus
для скрытого элемента (поскольку текущая ссылка не обновляется).
Вот почему вам нужно позвонить $nextTick()
, чтобы обновить его. Но если вам нужно быстрое решение вашей проблемы, без вызова $nextTick()
, вы можете обновить его вручную следующим образом:
this.displayTitleInput = "inline-block"
this.$refs["input_" + id].style.display = this.displayTitleInput
this.$refs["input_" + id].focus();
Это бы тоже сработало :) Надеюсь, это поможет !!