javascript - Vue - 使用 refs 来聚焦元素目标

标签 javascript dom vue.js focus refs

点击span class="before-click"时,
我想隐藏它,而是显示 input class="after-click"。
并且出现的输入标签必须是焦点!
问题是当我尝试使用 $refs.afterClick 访问那个 DOM 并给它 .focus() 时,一个意外错误显示 .focus() 不是一个函数。
如何解决这个问题? 谢谢。

var myApp = new Vue({
  el: '#app',
  data: {
    onEdit: false,
    msg: 'Something in here',
  },
  methods: {
    switchAndFocus() {
      if(!this.onEdit) {
       this.onEdit = true;
       this.$refs.afterClick.focus();
      }
    },
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script>
<div id="app">
  <span class="before-click" @click="switchAndFocus()" v-show="!onEdit">{{msg}}</span>
  <input type="text" class="after-click" ref="afterClick" :value="msg" v-show="onEdit">
</div>

最佳答案

将焦点事件包装在 nextTick 中 - 这将推迟焦点事件,直到 DOM 更新并显示输入。

https://v2.vuejs.org/v2/api/#Vue-nextTick

var myApp = new Vue({
  el: '#app',
  data: {
    onEdit: false,
    msg: 'Something in here',
  },
  methods: {
    switchAndFocus() {
      if(!this.onEdit) {
       this.onEdit = true;
       this.$nextTick(function(){
        this.$refs.afterClick.focus();
       });
      }
    },
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script>
<div id="app">
  <span class="before-click" @click="switchAndFocus()" v-show="!onEdit">{{msg}}</span>
  <input type="text" class="after-click" ref="afterClick" :value="msg" v-show="onEdit">
</div>

关于javascript - Vue - 使用 refs 来聚焦元素目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47409672/

相关文章:

javascript - 在事件目标上添加 css tilde 从 element1 到 element2

javascript - HTML + JS - float 标题栏的变体和指向命名 anchor 错误的链接

javascript - Vue3 相当于 vNode.compulatedInstance

JavaScript createElement qn

javascript - 修复动画属性

javascript - ExtJS4 组合框加载/存储问题

javascript - 如何在 IE11 上禁用文本区域中的自动更正而不禁用拼写检查?

laravel - Blade 中的 Vue 组件

javascript - 如何在 vue.js 中的项目循环内切换类

javascript - react 路由器在按钮单击时不起作用