JS短信倒计时案例

<!DOCTYPE html>
<html lang="en">
<!-- 案例分析:
1. 按钮点击之后,会变成禁用状态(disabled为ture)
2. 同时按钮里面的内容会变化,button里面的内容通过innerHTML修改
3. 按钮中的秒数发生变化,因此需要用到定时器
4. 定义一个变量,在定时器里面,不断递减
5. 如果变量为0说明到了时间,需要停止定时器,并且复原按钮初始状态 --><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>Document</title><style>* {margin: 0;padding: 0;}span {font-size: 10px;}input {width: 130px;height: 15px;margin-left: 20px;font-size: 10px;color: #999;}button {width: 80px;font-size: 10px;}</style>
</head><body><input type="text" placeholder='请输入手机号' id="tele"><button>获取验证码</button><script>// 获取元素var input = document.querySelector('#tele');var btn = document.querySelector('button');// 注册事件input.addEventListener('focus', function () {this.style.color = '#000';})var time = 60;  // 定义剩余秒数btn.addEventListener('click', function () {var tele = input.value;if (tele.length != 11) {  //判断输入框内容的长度是否为11位input.value = '手机号输入有误!'; //如果输入有误,则输入框以红色文本提示错误input.style.color = '#ff0000';setTimeout(function () {  // 设置定时器,在给出输入错误的提示1s后恢复原始输入状态input.value = tele;input.style.color = '#000';}, 1000)} else {this.disabled = true; // 手机号输入正确,则按钮变为禁用状态,并设置定时器var timer = setInterval(function () {if (time == 0) {// 清除定时器和复原按钮clearInterval(timer);btn.disabled = false;btn.innerHTML = '获取验证码';time = 60;  // 每次点击都需要重新开始计时} else {btn.innerHTML = '剩余' + time + '秒';time--;}}, 1000);}})</script>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARMv8如何读取cache line中MESI 状态以及Tag信息(tag RAM dirty RAM)并以Cortex-A55示例

Cortex-A55 MESI 状态获取 一&#xff0c;系统寄存器以及读写指令二&#xff0c;Cortex-A55 Data cache的MESI信息获取&#xff08;AARCH 64&#xff09;2.1 将Set/way信息写入Data Cache Tag Read Operation Register2.2 读取Data Register 1和Data Register 0数据并解码 参考…

93. 复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.011.255.24…

Linux嵌入式学习之Ubuntu入门(六)shell脚本详解

系列文章内容 Linux嵌入式学习之Ubuntu入门&#xff08;一&#xff09;基本命令、软件安装、文件结构、编辑器介绍 Linux嵌入式学习之Ubuntu入门&#xff08;二&#xff09;磁盘文件介绍及分区、格式化等 Linux嵌入式学习之Ubuntu入门&#xff08;三&#xff09;用户、用户组…

获取url后面的参数

方式一 final String queryString request.getQueryString(); System.out.println(queryString); //解码 System.out.println(URLDecoder.decode(queryString, StandardCharsets.UTF_8));测试&#xff1a; pageSize25&pageNum1&sort%5B%27id%27%5Ddesc&sort%5B%…

Java 基于 SpringBoot 的学生考勤系统

1 简介 本文讲解的是 Java基于 SpringBoot 的学生考勤系统。学生考勤管理系统能做到的不仅是大大简化管理员的信息管理工作&#xff0c;在提高学生考勤管理效率的同时还能缩减开支&#xff0c;更能在数字化的平面网络上将学生考勤管理最好的一面展示给客户和潜在客户&#xff…

swift加载h5页面空白

swift加载h5页面空白 problem 背景 xcode swift 项目&#xff0c;WebView方式加载h5页面本地h5地址是&#xff1a;http://localhost:5173/ 浏览器打开正常 Swift 加载h5&#xff1a; 百度官网 加载正常本地h5页面 加载空白&#xff0c;没有报错 override func viewDidLoad…

Netron【.pt转.torchscript模型展示】

Netron是一个模型的展示工具&#xff0c;它有网页版和app版&#xff1a; 网页版&#xff1a;Netron app版&#xff1a;GitHub - lutzroeder/netron: Visualizer for neural network, deep learning, and machine learning models 直接用网页版吧&#xff0c;还不用安装。 它可…

安装NodeJS并使用yarn下载前端依赖

文章目录 1、安装NodeJS1.1 下载NodeJS安装包1.2 解压并配置NodeJS1.3 验证是否安装成功2、使用yarn下载前端依赖2.1 安装yarn2.2 使用yarn下载前端依赖参考目标:在Windows下安装新版NodeJS,并使用yarn下载前端依赖,实现运行前端项目。 1、安装NodeJS 1.1 下载NodeJS安装包…

Nginx之Openresty缓存解读

目录 lua_shared_dict lua-resty-lrucache 新建 设置 获取 删除 综合使用案例 计数 全部刷新 lua_shared_dict 语法&#xff1a; lua_shared_dict <名称> <大小> 默认值&#xff1a; 否 上下文&#xff1a; http 阶段&#xff1a; 取决于使用情况 声明一…

带你10分钟学会红黑树

前言&#xff1a; 我们都知道二叉搜索树&#xff0c;是一种不错的用于搜索的数据结构&#xff0c;如果二叉搜索树越接近完全二叉树&#xff0c;那么它的效率就会也高&#xff0c;但是它也存在的致命的缺陷&#xff0c;在最坏的情况下&#xff0c;二叉搜索树会退化成为单链表&am…

字典与数组第七讲:工作表数据计算时为什么要采用数组公式(一)

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

java数据库连接操作合集

import com.alibaba.druid.pool.DruidDataSourceFactory; import org.testng.annotations.Test;import javax.sql.DataSource; import java.io.FileInputStream; import java.sql.*; import java.util.ArrayList; import java.util.Properties; //大概的流程就是:1. 注册驱动 2…

谷歌地球引擎GEE账户注册的快速、百分百成功方法

本文介绍免费注册谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;账户的方便、快捷的最新方法&#xff1b;基于这一方法&#xff0c;只要我们创建一个谷歌Cloud Project&#xff0c;就可以直接访问GEE。 GEE在原本&#xff08;大概前几年的时候&#…

Redis-缓存穿透,缓存击穿,缓存雪崩

缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩 缓存穿透处理方案解决方案1 缓存空数据解决方案2 布隆过滤器 缓存击穿处理方案解决方案 1 互斥锁解决方案2 逻辑过期 缓存雪崩处理方案解决方案 1 给不同的key的过期时间设置添加一个随机值&#xff0c;降低同一个时段大量ke…

处理机调度的概念,层次联系以及七状态模型

1.基本概念 当有一堆任务要处理&#xff0c;但由于资源有限&#xff0c;这些事情没法同时处理。 这就需要确定某种规则来决定处理这些任务的顺序&#xff0c;这就是“调度”研究的问题。 2. 三个层次 1.高级调度&#xff08;作业调度&#xff09; 高级调度&#xff08;作业…

hive数据load到redis

使用shell脚本来实现&#xff0c;脚本如下&#xff1a; #!/bin/bash# 定义变量 pwd/root day$(date %Y%m%d) before_day$(date -d -1day %Y%m%d) log_file$pwd/load_redis_$day.log# 创建目录 mkdir -p $pwd/$day && echo "$(date %Y-%m-%d %H:%M:%S)----$pwd/$d…

【c++11特性】——static_cast,dynamic_cast,const_cast,reinterpret_cast解析

目录 1.static_cast 2.dynamic_cast dynamic_cast为什么只能用于具有虚函数的类&#xff1f; 3.const_cast 4.reinterpret_cast reinterpret_cast 的作用 static_cast 和dynamic_cast的区别&#xff1f; 1.static_cast 概念 static_cast 是C中的一种类型转换运算符&am…

【C++设计模式之模板模式】分析及示例

C之模板模式 描述实现原理示例步骤1步骤1 分析步骤2步骤2 分析调用输出结果 结论 描述 模板模式&#xff08;Template Pattern&#xff09;是设计模式中的一种行为型模式。 该模式定义一个操作中的算法骨架&#xff0c;而将具体的算法实现延迟到子类中。 模板模式使得子类可以…

【10】c++设计模式——>依赖倒转原则

关于依赖倒转原则&#xff0c;对应的是两条非常抽象的描述&#xff1a; 1.高层模块不应该依赖低层模块&#xff0c;两个都应该依赖抽象。 2.抽象不应该依赖细节&#xff0c;细节应该依赖抽象。 先用人话解释一下这两句话中的一些抽象概念&#xff1a; 1.高层模块&#xff1a;可…

ROS(5)PX4仿真安装及运行

1、配置&#xff0c;提升下载速度 启动 $ cd clash-for-linux$ sudo bash start.sh$ source /etc/profile.d/clash.sh$ proxy_on 关闭 $ cd clash-for-linux$ sudo bash shutdown.sh$ proxy_off 2、安装PX4开源无人机 git clone https://github.com/PX4/PX4-Autopilot.git…