<el-input v-model="input" placeholder="请输入内容" v-if="showinput" v-focus id="myText" ref="mark"></el-input>
方法一
使用this.nextTick()
JS
this.$nextTick(()=>{
this.$refs['mark'].focus();
})
方法二
使用getElementById
setTimeout(()=>{
document.getElementById("myText").focus();
},100)
以上两种方法在table 列设置为fixed时聚焦效果会失效
解决方法如下
使用自定义指令v-focus
在main.js文件中定义
Vue.directive("focus", {
bind:function (el) { // 1.每当指令绑定到元素上的时候,会立即执行这个bind函数,【执行一次】
el.focus()
},
inserted:function (el) { // 2.当元素插入到DOM中的时候,会执行 inserted 函数, 【触发一次】
if(el.tagName.toLocaleLowerCase() == 'input'){
el.focus()
}else{
if(el.getElementsByTagName('input')){
el.getElementsByTagName('input')[0].focus()
}
}
},
updated:function ( ) { // 3.当VNode更新的时候,会执行 updated,【可能触发多次】
el.focus()
}
});
el-input中 插入 v-focus 指令即可。
ps:移除焦点把focus 改为 blur即可。
全部代码
<template>
<div>
<div @click="qaq()">qaq</div>
<el-input v-model="input" placeholder="请输入内容" v-if="showinput && qwq" id="myText" ref="mark"></el-input>
<el-input v-model="input2"></el-input>
</div>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
qwq:true,
showinput:false,
input:"aa",
input2:"bb",
msg: "Welcome to Your Vue.js App",
};
},
// mounted(){
// this.$refs['mark'].focus()
// },
methods: {
qaq() {
(this.showinput==false) ? (this.showinput=true) : (this.showinput=false);
console.log("q",this.showinput)
if(!this.showinput){
return
}
this.$nextTick(()=>{
this.$refs['mark'].focus();
setTimeout(()=>{
document.getElementById("myText").focus();
// this.$refs.myInput.focus();
},100)
})
setTimeout(()=>{
document.getElementById("myText").focus();
},100)
},
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>