【发布时间】:2021-03-01 14:39:08
【问题描述】:
我在Vue JS 中有一个form,它是通过axios 调用和axios 之后提交的,我想专注于特定的input 元素,但它无法正常工作。
这里是input:
<input type="text" class="form-control mb-2" :id="'txtTazkira' + s.id"
@input="setTxtTazkira($event, s.id)" :value="s.tazkira" />
表单提交时调用以下函数:
submitForm() {
this.form.txtTazkira = this.txtTazkira
this.form.selectedNotebook = this.selectedNotebook.id
this.nextSlot = document.getElementById('txtTazkira' + (this.form.slotId + 1))
axios
.patch('/Notebook/api/slots/' + this.form.slotId, this.form)
.then((response) => {
this.tazkiraSaved = true
this.fetchSlots()
this.nextSlot.focus()
console.log(this.nextSlot)
})
.catch((errors) => {
alert('Unable to save Tazkira, There might be some issues.')
this.tazkiraSaved = false
})
},
可以看出,在 axios 调用之后,我有 this.nextSlot.focus() 没有将焦点设置到 input 元素。我也尝试执行以下操作但没有成功:
this.$nextTick(() => {
this.nextSlot.focus();
});
我还尝试了以下添加:ref="'txtTazkira' + s.id"的方法:
<input type="text" class="form-control mb-2" :id="'txtTazkira' + s.id"
@input="setTxtTazkira($event, s.id)" :value="s.tazkira" :ref="'txtTazkira' +
s.id">
然后在js 中尝试了以下操作,但仍然无法正常工作:
var newSlot = 'txtTazkira' + (this.form.slotId + 1);
axios.post(.....)
{
......
this.$nextTick(() => {
this.$refs[newSlot].focus();
});
}
我搜索了谷歌并找到了一些相关的讨论,但这并没有解决我的问题,因此我在这里发布了这个问题。
提前感谢任何帮助。
【问题讨论】:
-
你试过在axios回调中定义
this.nextSlot。我感觉 this.fetchSlots 触发了 DOM 更新,并且在 axios 请求之后您可能会丢失对nextSlot的引用。此外,正如@Asimple 所写,使用 refs 是一种更好的方法。 -
声明
var newSlot = 'txtTazkira' + (this.form.slotId + 1);时为什么要加1? (顺便说一句,在这种情况下,最好使用let而不是var)。另一件事——如果你在focus()之前做console.log(this.$refs)——你会得到什么?
标签: javascript vue.js axios