JavaScript基础 - 经典案例2 - 生成校验验证码

本文介绍了如何使用JavaScript实现一个基本的验证码功能,包括生成4位包含0-9和小写字母的随机验证码,用户输入验证,错误提示以及验证码刷新功能。重点在于JavaScript的随机数生成及DOM操作。

需求:

随机生成4位验证码,范围0-9a-z,用户输入后,点击确定按钮开始校验;

若用户未输入,弹出提示框;

若用户输入错误,显示红色的字,提示用户验证码输入错误,重新生成验证码,并清空输入框;

若用户输入正确,显示绿色的字,提示用户验证码输入正确;

当用户点击看不清换一张时重新显示新的验证码;

示例:

 

 

 

 

关键点:

1、生成随机数

2、修改DOM元素内容、样式

代码示例:

HTML:

<div class="code">
    <!-- 验证码显示 -->
    <div class="code_show">
        <span class="code_check">fr3d</span>
        <a href="javascript:;" class="change">看不清换一张</a>
    </div>

    <!-- 验证码输入 -->
    <div class="code_input">
        验证码:<input type="text">
        <!-- 提示验证码输入对错 -->
        <span class="tip"></span>
    </div>

    <button>确定</button>
</div>

CSS:

.code_input .tip {
    color: red;
}

/* 验证码输入正确时的样式 */
.code_input .tip.right {
    color: green;
}

JS

<script>
    // 获取显示验证码的span
    let codeCheck = document.querySelector('.code_check')
    // 获取'看不清换一张'按钮
    let change = document.querySelector('.change')
    // 获取提示验证码输入对错的span
    let tip = document.querySelector('.tip')
    // 获取验证码输入框
    let input = document.querySelector('.code_input input')
    // 获取确定按钮
    let btn = document.querySelector('.code button')

    // 确定按钮点击事件
    btn.addEventListener('click', () => {

        // 用户未输入提示'请输入验证码!'时
        if (!input.value) {
            return alert('请输入验证码!')
        }

        // 用户输入验证码与显示的验证码不一致时
        if (input.value !== codeCheck.innerHTML) {

            // 将用户输入框清空,便于用户下一次输入
            input.value = ''

            // 更换验证码
            codeCheck.innerHTML = getRandomCode(4)

            // 去掉提示验证码输入对错的span的 .right 样式
            tip.className = 'tip'

            // 设置提示验证码输入对错的span的内容,并退出函数
            return tip.innerHTML = '验证码输入错误!'
        }

        // 用户输入验证码正确
        tip.innerHTML = '验证码输入正确!'
        tip.classList.add('right')

    })

    // '看不清换一张'按钮点击事件
    change.addEventListener('click', () => {
        codeCheck.innerHTML = getRandomCode(4)

        // 清空提示验证码输入对错的span的内容
        tip.innerHTML = ''
    })

    // 生成随机数函数,范围是 min-max
    function getRandomNum(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min
    }

    // 生成 n 位随机验证码函数 /^[0-9a-z]{4}$/
    function getRandomCode(n) {

        // 验证码素材数组
        let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

        // 存放验证码的字符串
        let checkStr = ''

        for (let i = 0; i < n; i++) {
            // 调用getRandomNum函数,生成随机的 n 个数组下标
            let random = getRandomNum(0, arr.length - 1)

            // 将数组下标对应的元素拼接到字符串
            checkStr += arr[random]
        }

        return checkStr
    }
</script>

结束;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值