[英]Vue: Set focus to dynamic input box
正如@ramakant-mishra 告訴您必須使用this.$refs
,但您還需要在輸入元素上動態添加 ref 屬性。 讓我演示給你看:
new Vue({ el: '#app', data: { emails:[] }, methods: { add: function (e) { let j = this.emails.push("") this.$nextTick(() => { this.$refs[`email${j - 1}`][0].focus() }) } } })
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div v-for="(email, i) in emails" :key="i"> <input v-model="email" :ref="`email${i}`" /> </div> <button @click="add">add</button> </div>
只是不要忘記使用 $nextTick 因為新元素尚未在模板上呈現
他們的關鍵是將所有input
的ref
設置為相同的字符串,如下所示:
<input type="text" ref="myInputs"/>
然后,您將可以訪問事件處理程序中名為this.$refs.myInputs
的數組。
new Vue({ el: "#app", data() { return { emails: [] }; }, methods: { addEmail() { this.emails.push('whatever'); this.$nextTick(() => { const lastIdx = this.emails.length - 1; this.$refs.myInputs[lastIdx].focus(); }); } } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script> <div id="app"> <input type="button" @click="addEmail()" value="Add Email"/> <div v-for="(email, index) in emails" :key="index"> <input ref="myInputs" type="text" /> </div> </div>
請注意,下面您必須將調用focus()
放在nextTick()
中,以便讓 Vue 有機會實際呈現您剛剛添加到列表中的電子郵件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.