vue3 打开页面input框自动获得焦点

1、需要聚焦的el-input输入框设置ref值: ref="getfcous"

<el-input v-model="workorder" ref="getfocus" :clearable="true" @keyup.enter.native="fill()" placeholder="请扫码或输入"/>

2、在mounted生命周期使用this.$nextTick设置自动聚焦:

mounted(){
            // 页面渲染完成时自动聚焦到用户名输入框,ref="getfocus"
            this.$nextTick(() => {
                this.$refs.getfocus.focus();
            })
        },

 

=============================================================================================

此处表单使用element-plus框架中的表单组件。

制作简单版的登录表单。

2个输入框:用户名username,密码password;1个登录按钮。

表单中双向绑定:
data中设置对象user来获取并保存表单中输入的数据:user:{username:'',password:''}。

el-form标签:      :model="user"

el-input输入框:  v-model="user.username"和v-model="user.password"


加载页面时输入框自动聚焦:
1. 需要聚焦的el-input输入框设置ref值: ref="unameInput"   (unameInput为自己任意命名)

2. 在mounted生命周期使用this.$nextTick设置自动聚焦:

mounted(){
        // 页面渲染完成时自动聚焦到用户名输入框,ref="unameInput"
        this.$nextTick(() => {
            this.$refs.unameInput.focus();
        })
    }
回车自动聚焦下一个输入框:
1. 先在需要聚焦的el-input输入框上设置ref值:ref="pwdInput"。

2. 再用@keyup.enter设置回车自动聚焦:

    回车聚焦下一个输入框:@keyup.enter="this.$refs['pwdInput'].focus()"

    回车聚焦到登录按钮:@keyup.enter="login('form')"

    登录按钮(此处方法login):@click="login('former')"



完整代码:

<template>
    <div class="login">
        <el-form
            label-position="top"
            label-width="100px"
            :model="user"
            style="max-width: 460px"
        >
            <el-form-item label="用户名:">
                <el-input
                    v-model="user.username"
                    ref="unameInput"
                    @keyup.enter="this.$refs['pwdInput'].focus()"/>
            </el-form-item>
            <el-form-item label="密码">
                <el-input type="password"
                    v-model="user.password"
                    ref="pwdInput"
                    @keyup.enter="login('form')"/>
            </el-form-item>
            <el-button type="primary"
                @click="login('former')"
            >
                登录
            </el-button>
        </el-form>
    </div>
</template>

<script>
export default {
    name:'login',
    data(){
        return{
            user:{username:'',password:''},
            userList:[
                {username:'admin',password:'123'},
                {username:'11',password:'11'}
            ]
        }
    },
    mounted(){
        // 页面渲染完成时自动聚焦到用户名输入框,ref="unameInput"
        this.$nextTick(() => {
            this.$refs.unameInput.focus();
        })
    },
    methods:{
        // 登录
        login(){
            try{
                this.userList.forEach((u) => {
                    if(u.username === this.user.username && u.password === this.user.password){
                        this.$router.push('/');
                        throw new Error('已匹配')
                    }
                })
            }catch(e){
                return
            };
            alert("请输入正确用户名和密码。")
        }
    }
}
</script>

<style>
.login{
    /* 表单外容器样式 */
    background:rgb(245, 240, 240);
    height:320px;
    width:450px;
    margin:100px auto;
    border-radius: 20px;
    /* 表单位置水平垂直居中 */
    display:flex;
    justify-content: center;
    align-items: center;
}
</style>

 https://www.bilibili.com/read/cv19694317/

 
posted @ 2023-01-10 16:17  cmooc  阅读(10731)  评论(0编辑  收藏  举报