发送验证码

本文展示了如何使用JavaScript实现点击发送按钮后禁用该按钮并开始1分钟倒计时,倒计时结束后恢复可点击。用户需在输入框中输入验证码0505,提交后会弹窗提示注册成功或失败。代码包括HTML结构、CSS样式和JS逻辑,涉及按钮状态控制、计时器设置及事件监听。

需求

  1. 点击“发送”按钮后,会被禁用
  2. 被点击后,按钮里面会变成1分钟倒计时
  3. 待“发送”按钮被触发后,才可以点击提交按钮
  4. 需要在验证码框里输入0505,提交后便用弹窗提示成功

效果展示

验证码

实现原理

将提交按钮设为disabled,默认人不可按,通过disabled=true/false来控制按钮是禁用还是启动;点击发送按钮。分别用到两个计时器setInterval和setTimeout;当倒计时开始的时候修改按钮内部的内容,用来保存倒计时数字。

具体代码如下

JS部分

    <script>
    window.onload=function(){
    var input = document.querySelector("input")
    var fsbtn = document.querySelector(".fs")
    var tjbtn = document.querySelector(".tj")

    tjbtn.disabled = true
    fsbtn.onclick = function(){
        fsbtn.disabled = true
        var timer1 = setTimeout(() => {
            fsbtn.disabled = false
        }, 60000);
        var t=60
        var timer2 = setInterval(() => {
            t--
            if (t==0) {
                clearInterval(timer2)//当倒计时结束的时候清除计时器
            }
           fsbtn.innerHTML=`<span>${t}s</span>` //利用span标签用来保存倒计时数字
        }, 1000);
        tjbtn.disabled = false
        input.placeholder="请输入验证码"
    }
    tjbtn.onclick=function(){
        if (input.value=="0505") {
            alert("注册成功")
        }else{
            alert("验证码错误")
        }
    }
}
    </script>

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>验证码</title>
    <style>
        .box{
            margin-left: 630px;
            margin-top: 140px;
        }
        input{
            display: inline-block;
            width: 200px;
            height: 20px;
            padding: 4px;
        }
        .fs{
            display: inline-block;
            width: 80px;
            height: 30px;
        }
        .tj{
            display: inline-block;
            width: 80px;
            height: 30px;
        }
    </style>
</head>
<body>
    <div class="box">
        <input type="text" placeholder="请发送验证码">
        <button class="fs">发送</button>
        <button class="tj">提交</button>
    </div>
    <script>
    window.onload=function(){
    var input = document.querySelector("input")
    var fsbtn = document.querySelector(".fs")
    var tjbtn = document.querySelector(".tj")

    tjbtn.disabled = true
    fsbtn.onclick = function(){
        fsbtn.disabled = true
        var timer1 = setTimeout(() => {
            fsbtn.disabled = false
        }, 60000);
        var t=60
        var timer2 = setInterval(() => {
            t--
            if (t==0) {
                clearInterval(timer2)//当倒计时结束的时候清除计时器
            }
           fsbtn.innerHTML=`<span>${t}s</span>` //利用span标签用来保存倒计时数字
        }, 1000);
        tjbtn.disabled = false
        input.placeholder="请输入验证码"
    }
    tjbtn.onclick=function(){
        if (input.value=="0505") {
            alert("注册成功")
        }else{
            alert("验证码错误")
        }
    }
}
    </script>
</body>
</html>
### 如何在Android应用中实现发送验证码功能 #### 页面布局设计 为了实现在Android应用中发送验证码的功能,页面布局需包含输入框供用户填写手机号以及按钮触发验证码发送操作。此部分可通过XML文件定义,在`res/layout/activity_main.xml`内设置相应组件[^1]。 ```xml <EditText android:id="@+id/phone_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入您的电话号码"/> <Button android:id="@+id/send_code_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送验证码"/> ``` #### 集成第三方服务或API接口调用 对于实际项目开发而言,通常会选择集成像Firebase这样的云服务平台来简化短信验证流程的设计与实施工作。这不仅能够快速搭建起稳定可靠的认证体系,同时也减少了自行维护服务器端程序的工作量[^2]。 - **添加Firebase依赖** 打开项目的build.gradle(Module:app),加入如下语句以便引入必要的库支持: ```gradle implementation 'com.google.firebase:firebase-auth' ``` - **初始化SDK并配置权限** 在项目的根目录下的`android/build.gradle`里确保已声明Google的服务插件;另外还需修改`AndroidManifest.xml`以申请网络访问权等必要权限。 - **编写Java/Kotlin代码处理业务逻辑** 下面给出一段基于Kotlin语言编写的简单示例,展示了如何利用Firebase Authentication完成向指定手机号发送六位随机数作为一次性密码的过程。 ```kotlin import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.FirebaseException import com.google.firebase.auth.* import java.util.concurrent.TimeUnit // ... val callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) {} override fun onVerificationFailed(e: FirebaseException) {} override fun onCodeSent( verificationId: String, token: ForceResendingToken ) { /* Save the verification ID and resending token */ } } PhoneAuthProvider.getInstance().verifyPhoneNumber( phoneNumber, // Phone number to verify 60L, // Timeout duration TimeUnit.SECONDS, // Unit of timeout this@MainActivity, // Activity (for callback binding) callbacks // OnVerificationStateChangedCallbacks ) ``` 上述方法实现了当点击“发送验证码”的时候启动异步任务去联系远程服务器请求生成新的OTP(one-time password), 同时也注册了一个回调函数用来接收来自后台返回的结果信息。 #### 用户体验优化——倒计时期间禁用重发按键 为了避免短时间内重复提交相同的请求造成不必要的资源浪费,可以在成功发起一次有效的查询之后立即将对应的控件设为不可编辑状态,并开启一个定时器逐渐减少剩余等待时间直至完全恢复可用性为止。 ```java private void startCountDownTimer(){ sendButton.setEnabled(false); new CountDownTimer(60000, 1000){ public void onTick(long millisUntilFinished){ sendButton.setText("重新发送 (" + millisUntilFinished / 1000 + ")"); } public void onFinish(){ sendButton.setEnabled(true); sendButton.setText("发送验证码"); } }.start(); } ``` 以上就是关于怎样在一个典型的安卓客户端工程里面构建出一套完整的发送手机短消息验证码解决方案的大致介绍。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值