javascript - 对话框打开时在对话框内设置焦点文本字段

标签 javascript vue.js vuejs2 vuetify.js

我有自定义文本字段,当对话框打开时我必须关注它的功能。我尝试使用 vue.js refs 聚焦它:

代码:

<v-app id="app">
  <v-row align="center">
    <v-col class="text-center" cols="12">
      <v-btn color="primary" @click="openDialog()">Open dialog</v-btn>
    </v-col>
  </v-row>
  <v-dialog v-model="dialog">
   <v-card>
    <v-card-title
      class="headline grey lighten-2"
      primary-title
    >
      Dialog
    </v-card-title>
    <v-card-text>
      <v-row>
        <v-col cols="6" class="ml-2">
            <v-text-field
              ref="name"
              placeholder="Enter your name..."
              type="text"
              solo
              flat
              outlined
            ></v-text-field>
            <v-btn 
              color="indigo" 
              dark 
              @click = "setFocusName()"
             >Set focus</v-btn>
        </v-col>
      </v-row>
    </v-card-text>
   </v-card>
  </v-dialog>
</v-app>

Javascript:

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data () {
    return {
      dialog: false
    }
  },
  methods: {    
    setFocusName() {
      this.$refs.name.focus();
    },

    openDialog() {
      this.dialog = !this.dialog  
      this.setFocusName()
    }
  }
});

当我单击打开对话框按钮时,我的文本字段没有获得焦点。在这里你可以看到我的完整 codepen

打开对话框时如何正确聚焦?

最佳答案

您的代码的问题是您试图在实际呈现之前访问 $ref,这是一个包含工作代码的沙箱: https://codepen.io/Djip/pen/ZEYezzm?editors=1011

为了解决该错误,我添加了一个 setTimeout 以在对话框打开 0.2 秒后触发焦点。我首先尝试使用 $nextTick,但这还不足以完成这项工作 - 您可以尝试调整计时器,使其尽可能低。

setFocusName() {
  this.$refs.name.focus();
},

openDialog() {
  this.dialog = !this.dialog  
  setTimeout(() => {
    this.setFocusName()
  }, 200)
}

关于javascript - 对话框打开时在对话框内设置焦点文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59407003/

相关文章:

javascript - 是否可以在 localStorage 中缓存外部库?

javascript - DataTable 中的 rowsPerPageOptions 未显示

javascript - 在 Vuejs 中渲染输入字段

vuejs2 - 使用 Prop 初始化 v-model?

javascript - 使用 Protractor 控制鼠标移动

javascript - 是否可以在 context.sync 之前对多个 context.load 进行排队?

javascript - 根据复选框隐藏/显示表行

javascript - 透明选项在带有nodeIntegration的 Electron 中不起作用

css - 如何使用 VueJS 在 DOM 中突出显示添加到状态变量的最后一行

javascript - 使用 Switch/Toggle Css/javascript 更改文本颜色