Vue 输入输入值,移至下一个字段
Vue on input value entered, move on to next field
我是 Vue 的新手,这也是我在 Vue 上的第一个项目。我有三个包含空值的输入字段。如果输入字段 1 接收到超过 5 个字符,是否有办法自动移动到第二个输入字段或使其成为 select
?如果输入字段 2 包含超过 5 个字符,则继续输入字段 3 或 select 输入字段 3 ?
查看
<div id="app">
<h2>Input Fields:</h2>
<div v-for="(todo,index) in todos" :key="index">
<b-form-input type="text" v-model="todo.datatype" :value="todo.id" placeholder="Insert Datatype"
v-on:input="moveToNextField($event)"></b-form-input>
/** If the input field 1, consists more than 5 characters. Automatically move on to second input field **/
<br>
</div>
</div>
脚本
new Vue({
el: "#app",
data: {
todos: [
{ id: "1", datatype: ""},
{ id: "2", datatype: ""},
{ id: "3", datatype: ""}
]
},
methods: {
toggle: function(todo){
todo.done = !todo.done
},
moveToNextField(event){
if(this.todos[0].datatype.length > 2)
{
console.log("field 1");
}
if(this.todos[1].datatype.length > 2)
{
console.log("field 2");
}
}
}
})
下面是我上传到 JsFiddle 的代码
首先,您不应该在同一元素/组件上同时使用 v-model
和 :value
。我假设您只想将输入绑定到每个 todo.datatype
.
您可以为您的输入分配一个 ref
属性,因为它们在 v-for
迭代器中,将在您组件的 $refs
属性 中创建一个数组.
然后您可以使用它来控制焦点。
例如
new Vue({
el: "#app",
data: {
todos: [
{ id: "1", datatype: "" },
{ id: "2", datatype: "" },
{ id: "3", datatype: "" }
]
},
methods: {
moveToNextField(value, index) {
const nextIndex = index + 1
if (nextIndex < this.todos.length && value.length > 5) {
this.$refs.todos[nextIndex].focus()
}
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
<div id="app">
<h2>Input Fields:</h2>
<div v-for="(todo, index) in todos" :key="todo.id">
<input
type="text"
v-model="todo.datatype"
placeholder="Insert Datatype"
ref="todos"
@input="moveToNextField($event.target.value, index)">
<br>
</div>
</div>
以上内容也适用于 BootstrapVue。
我是 Vue 的新手,这也是我在 Vue 上的第一个项目。我有三个包含空值的输入字段。如果输入字段 1 接收到超过 5 个字符,是否有办法自动移动到第二个输入字段或使其成为 select
?如果输入字段 2 包含超过 5 个字符,则继续输入字段 3 或 select 输入字段 3 ?
查看
<div id="app">
<h2>Input Fields:</h2>
<div v-for="(todo,index) in todos" :key="index">
<b-form-input type="text" v-model="todo.datatype" :value="todo.id" placeholder="Insert Datatype"
v-on:input="moveToNextField($event)"></b-form-input>
/** If the input field 1, consists more than 5 characters. Automatically move on to second input field **/
<br>
</div>
</div>
脚本
new Vue({
el: "#app",
data: {
todos: [
{ id: "1", datatype: ""},
{ id: "2", datatype: ""},
{ id: "3", datatype: ""}
]
},
methods: {
toggle: function(todo){
todo.done = !todo.done
},
moveToNextField(event){
if(this.todos[0].datatype.length > 2)
{
console.log("field 1");
}
if(this.todos[1].datatype.length > 2)
{
console.log("field 2");
}
}
}
})
下面是我上传到 JsFiddle 的代码
首先,您不应该在同一元素/组件上同时使用 v-model
和 :value
。我假设您只想将输入绑定到每个 todo.datatype
.
您可以为您的输入分配一个 ref
属性,因为它们在 v-for
迭代器中,将在您组件的 $refs
属性 中创建一个数组.
然后您可以使用它来控制焦点。
例如
new Vue({
el: "#app",
data: {
todos: [
{ id: "1", datatype: "" },
{ id: "2", datatype: "" },
{ id: "3", datatype: "" }
]
},
methods: {
moveToNextField(value, index) {
const nextIndex = index + 1
if (nextIndex < this.todos.length && value.length > 5) {
this.$refs.todos[nextIndex].focus()
}
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
<div id="app">
<h2>Input Fields:</h2>
<div v-for="(todo, index) in todos" :key="todo.id">
<input
type="text"
v-model="todo.datatype"
placeholder="Insert Datatype"
ref="todos"
@input="moveToNextField($event.target.value, index)">
<br>
</div>
</div>
以上内容也适用于 BootstrapVue。