我妈已经三天没打我了 2024-06-28 14:45 采纳率: 86%
浏览 11
已结题

发送短信验证码的倒计时一直停留在60秒,没有开始倒计时

为什么发送短信验证码的倒计时一直停留在60秒,没有开始倒计时

img


<div class="Pop-ups-code">
                    <input type="text" placeholder="请输入"/>
                    <p class="code"  @click="codeDialog" id="sendcodeid" :class="{ disabled: isSending }">{{ isSending ? count + '秒' : '获取验证码' }}</p>
                </div>

.code.disabled {
    background-color: #ccc;
    cursor: not-allowed;
  }

data: function() {
        return {
            isSending: false, // 用来跟踪是否正在发送验证码或倒计时
            count: 60, // 倒计时初始值
        }
    },

codeDialog() {
            if (!this.img_id) {
                this.drawing();
                layer.open({
                    content: '请输入正确的图形验证码',
                    skin: 'msg',
                    time: 2 //2秒后自动关闭
                });
                return false;
              }
              if (!this.captcha) {
                layer.open({
                    content: '请输入短信验证码',
                    skin: 'msg',
                    time: 2 //2秒后自动关闭
                });
                return false;
              }
              if (this.isSending) {
                // 如果正在发送或倒计时中,则不执行任何操作
                return;
              }
              this.isSending = true; // 开始发送验证码或倒计时
            //   this.count = 60; // 重置倒计时
        $.ajax({
            url: commonUrl + 'send/code',
            type: 'post',
            data: JSON.stringify({
                "img_id":this.img_id
            }),
            dataType: 'json',
            contentType: 'application/json',
            success: function(res) {
                if (res.result_code == '0') {
                    if (that.captcha) {
                        layer.open({
                            content: '验证码已发送,5分钟内有效。若60秒内没有收到验证码,请点击重新发送',
                            skin: 'msg',
                            time: 4 //2秒后自动关闭
                        });
                    }
               // 开始倒计时
        var timer = setInterval(() => { // 使用箭头函数
            this.count--;
            if (this.count == 0) {
              clearInterval(timer);
              this.isSending = false; // 倒计时结束,允许再次点击
              this.count = 60; // 重置倒计时,如果需要的话
            }
          }, 1000);
                }else{
                    layer.open({
                        content: '失败:'+res.result_message,
                        skin: 'msg',
                        time: 2 //2秒后自动关闭
                    });
                    this.isSending = false; // 发送失败,允许再次点击
                }
                
            },
            error: (xhr, status, error) => {
                this.isSending = false; // 发送失败,允许再次点击
              }
        })
        },

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-28 14:52
    关注

    引自免费微信小程序:皆我百晓生

    这个问题似乎是因为你在启动倒计时之前没有正确地将 isSending 设为 true 并且初始化了 count 值,还有可能因为定时器的逻辑可能出现了问题。这是可能的解决方案。请按照下面的修改试试。我将展示代码的变化以及解决倒计时停留问题的关键步骤。

    首先,在发送验证码前初始化 countisSending 的状态,确保 count 被设置为正确的初始值(例如 60 秒),并且 isSending 被设置为 true 表示开始倒计时。然后,启动倒计时器。在倒计时结束时清除定时器并重置状态。以下是修改后的代码片段:

    在你的 codeDialog() 函数中,在开始发送验证码之前添加以下代码来初始化 countisSending

    this.count = 60; // 设置倒计时的初始值
    this.isSending = true; // 设置正在发送验证码或倒计时的状态为 true
    

    然后,在启动倒计时的部分(通常在 AJAX 请求成功回调中),使用自执行的定时器函数来开始倒计时:

    // 开始倒计时
    var timer = setInterval(() => { // 使用箭头函数保持this指向vue实例的上下文
        if (this.count > 0) { // 确保count不为零,否则已经倒计时结束,无需再次计时
            this.count--; // 每秒减少一秒计数
            if (this.count === 0) { // 当倒计时结束时执行以下操作
                clearInterval(timer); // 清除定时器防止继续计数
                this.isSending = false; // 倒计时结束,允许再次点击获取验证码按钮(根据业务逻辑设置)
                this.count = 60; // 重置倒计时到初始值(如果需要的话)
            }
        }
    }, 1000); // 每秒执行一次定时器函数
    

    确保你的模板中的显示逻辑也更新了以反映这些更改。模板中的显示部分应该能够正确地根据 isSendingcount 的值显示倒计时的剩余时间或者“获取验证码”的按钮。此外,你的样式也应该反映出 isSending 状态的变化,比如当倒计时进行时显示不同的背景颜色或禁用状态。请确保这些逻辑也更新了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 创建了问题 6月28日

悬赏问题

  • ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘