【问题标题】:Vue on input value entered, move on to next fieldVue 输入输入值,移动到下一个字段
【发布时间】:2020-09-12 17:49:17
【问题描述】:

我是 Vue 的新手,这也是我在 Vue 上的第一个项目。我有三个输入字段,其中包含空值。如果输入字段 1 收到超过 5 个字符,是否有办法自动转到第二个输入字段或将其设为 select?如果输入字段 2 包含超过 5 个字符,则转到输入字段 3 或选择输入字段 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 上的代码

https://jsfiddle.net/ujjumaki/dpbojx0e/36/

【问题讨论】:

    标签: vue.js variable-length-array


    【解决方案1】:

    首先,您不应该在同一个元素/组件上同时使用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。

    【讨论】:

    • 对于 bootstrap-vue 使用 @input="moveToNextField($event, index)" 而不是 @input="moveToNextField($event.target.value, index)"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多