1.常用事件

  1.onclick   单击  应用场景:为按钮绑定

  2.ondbclick  双击

  3.onfocus    获得焦点

  4.onblur    失去焦点  应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.

  5.onchange   域的内容被改变  应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)

  6.onkeydown   某个键盘按键被按下。    应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.

2.绑定事件的方式:

  1.在标签里直接写属性( onclick=showTime() )

  2.通过JS给标签绑定事件

3.this:代表当前的是触发事件的当前标签

2.案例:让文本框中动态显示时间

  思路:要在input框里显示当前时间,1.获取当前时间;2.把时间字符串填到input框里

   //1.获取当前时间
var now = new Date();
var nowStr = now.toLocaleString();
//2.把时间填写到字符串input框里
var txt1 = document.getElementById("txt1");
txt1.value = nowStr;

  为了页面动态显示时间,使用定时器,但是定时器要传入函数,所以将上述四行代码放入函数中。

  function showTime() {
//1.获取当前时间
var now = new Date();
var nowStr = now.toLocaleDateString();
//2.把时间填写到字符串input框里
var txt1 = document.getElementById("txt1");
txt1.value = nowStr;
}

  实现点击开始按钮动态显示时间,这里用到了setInterval()函数

  //点击开始按钮,时间动态显示
var start = document.getElementById("start");
start.onclick = function () {
//每个一秒执行一次
var t = setInterval(showTime,1000);
}

  上述代码出现的问题是,由于先暂停1秒,导致第一次显示时间需要两秒钟,第二次开始才开始1s显示一次,解决办法点击的时候先调用以下showTime()

  实现点击暂停按钮暂停时间,这里用到了clearInterval()函数。

   var start = document.getElementById("start");
start.onclick = function () {
showTime()
//每个一秒执行一次
var t = setInterval(showTime,1000);
} var end = document.getElementById("end");
end.onclick = function () {
clearInterval(t)
}

  出现的问题,点击暂停按钮无法实现暂停,因为t不是全局变量,所以在end中无法获取,解决办法将t定义在函数外面,这样就可以实现暂停啦!

  本例子中最优价值的地方来了啊,在开始暂停都实现之后,连续点击两次开始以上,再点击暂停又无法实现暂停功能了。。。

  原因在于,每点击一次开始按钮,定时器都会把ID赋值给全局变量,t永远保持最新的定时器,页面上出现了多个定时器,清除的时候只清除最后一个。

  解决办法:判断t是否有定时器的ID,如果定时器非undefined,则说明有定时器,跳过setInterval这个步骤。

  这里还有一个问题,clearInterval(t);清除的是t对应的定时器,t的值还是在的,造成了暂停之后再点击开始,时间不动了。

  解决办法:就是让t再次进入if中,可以在clearInterval之后,设置t为undefined。 

   var start = document.getElementById("start");
start.onclick = function () {
showTime()
//每个一秒执行一次
if(t === undefined){
t = setInterval(showTime,1000);
}
} var end = document.getElementById("end");
end.onclick = function () {
clearInterval(t); //clearInterval(t) 清除的是t对应的定时器,t的值还是在的,造成了暂停之后再点击开始,时间不动了。
t = undefined; //就是让t再次进入if中,可以在clearInterval之后,设置t为undefined
}

完整的代码:

<input type="text" id="txt1">
<input type="button" value="开始" id="start">
<input type="button" value="暂停" id="end">
<script>
function showTime() {
//1.获取当前时间
var now = new Date();
var nowStr = now.toLocaleString();
//2.把时间填写到字符串input框里
var txt1 = document.getElementById("txt1");
txt1.value = nowStr;
}
var t = undefined;
//点击开始按钮,时间动态显示
var start = document.getElementById("start");
start.onclick = function () {
showTime()
//每个一秒执行一次
if(t === undefined){
t = setInterval(showTime,1000);
} } var end = document.getElementById("end");
end.onclick = function () {
clearInterval(t);
t = undefined;
}
</script>

    补充: setTimeout("JS语句",时间毫秒)clearTimeout()  setInterval()  clearInterval()

       setInterval(),每个多少毫秒执行一次函数,循环执行;  clearInterval(),结束循环

          

JS基础语法之DOM02(事件)的更多相关文章

  1. JavaScript进阶 - 第2章 你要懂的规则(JS基础语法)

    第2章 你要懂的规则(JS基础语法) 2-1什么是变量 什么是变量? 从字面上看,变量是可变的量:从编程角度讲,变量是用于存储某种/某些数值的存储器.我们可以把变量看做一个盒子,盒子用来存放物品,物品 ...

  2. 【JS基础语法】---学习roadmap---6 parts

    JS基础语法---roadmap Part 1 - 2: Part 3 - 4:   Part 5 - 6

  3. 9.12/ css3拓展、js基础语法、程序基本知识、数据类型、运算符表达方式、语句知识点

    css3拓展: <display:none>  将某个元素隐藏       <visibility:hidden>  也是将某个元素隐藏 <display:block&g ...

  4. JS基础语法(二)

    目录 JavaScript基础语法(二) 八. 函数 1. 函数的概念 2. 函数的使用 声明函数 调用函数 3. 函数的封装 4. 函数的参数 函数的参数匹配问题 5. 函数返回值 6. argum ...

  5. JavaScript01 js基础语法,数据类型

    JavaScript的概述: 1.组成 三部分组成 ecmaScript 基础语法 (es5) dom document object model 文档对象模型 (操作html文档内容) bom bo ...

  6. JavaScript学习笔记 - 进阶篇(1)- JS基础语法

    前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...

  7. Vue.js基础语法(一)

    vue学习的一系列,全部来自于表哥---表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 前言: 前端解析数 ...

  8. node.js基础 1之 HTTP事件回调进阶(HTTP模块)

    HTTP概念进阶 1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯 ...

  9. 二、JavaScript语言--JS基础--JavaScript进阶篇--事件响应

    1.什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户 ...

随机推荐

  1. 【转载】C# 开源库大全非常好

    原文地址:http://m.blog.csdn.net/woddle/article/details/37311877 C#开源大全 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMuk ...

  2. element-ui 框架中使用 NavMenu 导航菜单组件时,点击一个子菜单会出现多个子菜单同时展开或折叠?

    我在使用 elment-ui 框架的导航组件时,直接粘贴复制了官网上 (http://element-ui.cn/#/zh-CN/component/menu)的例子不会出错,但是当我将他们转化为动态 ...

  3. 安装xampp之后报错XAMPP: Starting Apache...fail.

    1.安装完成xampp之后报错: 2.网上查到的解决办法是:输入sudo apachectl stop 之后再次启动lampp,问题得以解决: 过两天发现问题并没有解决: ①在网上查询发现是因为端口被 ...

  4. Java 虚拟机 - ClassLoader

    ClassLoader定义 ClassLoader种类 BootStrapClassLoader无法在IDEA里面查看源代码,只能看JVM 源码才能找到. ExtClassLoader,会从Syste ...

  5. LUOGU P2294 [HNOI2005]狡猾的商人(差分约束)

    [传送门] (https://www.luogu.org/problemnew/show/P2294) 解题思路 差分约束.先总结一下差分约束,差分约束就是解决一堆不等式混在一起,左边是差的形式,右边 ...

  6. Laravel依赖

    首先有个接口 interface Visit { public function go (); } 然后有三个类Leg,Car,Train class Leg implements Visit { p ...

  7. PAT甲级——A1114 Family Property【25】

    This time, you are supposed to help us collect the data for family-owned property. Given each person ...

  8. python 中的 用chr()数值转化为字符串,字符转化为数值ord(s)函数

    1.1 python字符串定义 #!/usr/bin/python # -*- coding: utf8 -*- # 定义一个字符串 s1 = 'this is long String that sp ...

  9. MySQL初始化(35-03)

    1, 在MySQL的安装目录下新建个data目录. 2,初始化mysqld --initialize-insecure

  10. 7_2.springboot2.x启动配置原理_2.运行run方法

    当创建完SpringApplication对象之后运行run方法 public ConfigurableApplicationContext run(String... args) { StopWat ...