前端学习(JS事件)

1.主要内容

在这里插入图片描述

2.事件

事件(Event)是JavaScript应用跳动的心脏,进行交互,使网页动起来。当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击、鼠标经过某个特定元素或按下键盘上的某些按键。事件还可能是Web浏览器中发生的事情,比如说某个Web页面加载完成,或者是用户滚动窗口或改变窗口大小。
通过使用JavaScript,你可以监听特定事件的发生,并规定让某些事件发生以对这些事件做出响应。

2.1.作用

	(1)验证用户输入的数据。
	(2)增加页面的动感效果。
	(3)增强用户的体验度

2.2.事件中的几个名词

事件源:谁触发的事件
事件名:触发了什么事件
事件监听:谁管这个事情,谁监视?
事件处理:发生了怎么办

2.3.事件类型

JavaScript可以处理的事件类型为︰鼠标事件、键盘事件、HTML事件。

  • Window事件属性:针对window对象触发的事件(应用到标签)
  • Form事件:由HTML表单内的动作触发的事件(应用到几乎所有HTML元素,但最常用在form元素中)
  • Keyboard事件:键盘事件
  • Mouse事件:由鼠标或类似用户动作触发的事件
  • Media事件:由媒介(比如视频、图像和音频)触发的事件(适用于所有HTML元素,但常见于媒介元素中,比如<audio><embed><img><object>以及<video>)
onload:当页面或图像加载完后立即触发
onblur:元素失去焦点
onfocus:元素获得焦点
onclick:鼠标点击某个对象
onchange:用户改变域的内容
onmouseover:鼠标移动到某个元素上
onmouseout:鼠标从某个元素上离开
onKeyup:某个键盘的键被松开
onKeydown:某个键盘的键被按下

2.4.事件流和事件模型

  • 我们的事件最后都有一个特定的事件源,暂且将事件源看做是HTML的某个元素,那么当一个HTML元素产生一个事件时,该事件会在元素节点与根节点之间按特定的顺序传播,路径所经过的节点都会受到该事件,这个传播过程称为DOM事件流。
  • 事件顺序有两种类型:事件捕获事件冒泡
  • 冒泡和捕获其实都是事件流的不同表现,这两者的产生是因为IE和Netscape两个大公司完全不同的事件流概念产生的。(事件流:是指页面接受事件的顺序)IE的事件流是事件冒泡,Netscape的事件流是事件捕获流。

2.4.1.事件冒泡

IE的事件流叫做事件冒泡,即事件开始时由最具体的元素接受,然后逐级向上传播到较为不具体的节点(文档)。例如下面的:

<! DOCTYPE html>
<htm1>
	<head>
		<meta charset="UTF-8">
		<title>Javascript</title>
	</head>
	<body>
		<div id="myDiv">click me</div>
	</body>
</html>

如果点击了页面中的<div>元素,那么这个click事件会按照如下顺序传播:
1.<div>
2.<body>
3.<html>
4. document
也就是说,click事件首先在div元素上发生,而这个元素就是我们单击的元索。然后,click事件沿DOM树向上传播,在每一级节点上都会发生,直到传播到document对象。
所有现代浏览器都支持事件冒泡,但在具体实现上还是有一些差别。

2.4.3.DOM事件流

“DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。首先发生的是事件捕获阶段,为截获事件提供了机会。然后是实际的目标接收到事件。最后一个阶段是冒泡阶段,可以在这个阶段对事件做出响应。
在这里插入图片描述

2.5.事件处理程序

事件就是用户或浏览器自身执行的某种动作。例如click、load和mouseover都是事件的名字,而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click事件的事件处理程序就是onclick,为事件指定处理程序的方式有好几种。

2.5.1.HTML事件处理程序

某个元素支持的每种事件,都可以用一个与相应事件处理程序同名的HTML特性来指定。这个特性的值应该是能够执行的JavaScript代码:

<input type="button" value="Press me" onclick="alert('thanks ');"/>

这样做有一些缺点,例如耦合度过高,还可能存在时差问题(当用户点击按钮时,处理函数还未加载到此时处理函数是单独写的一段js代码),而且在不同的浏览器上可能会有不同的效果。

2.5.2.DOM0级事件处理程序

通过JavaScript指定事件处理程序的传统方式,就是将一个函数赋值给一个事件处理程序属性。这种方式被所有现代浏览器所支持。这种方式首先必须取得一个要操作的对象的引用,每个元素都有自己的事件处理程序属性,这些属性诵常全都小写,例如onclick,然后将这种属性的值设为一个函数,就可以指定事件处理程序了。例如:

<body>
	<button id="myBtn">按钮</button>
	<script type="text/javascript">
		var btn = document.getElementById( ' myBtn ' );
		btn.onclick = function(){
		console.log( 'you click a button ' ) ;
		}
	</script>
</body>

以这种方式添加的事件处理程序会在事件流的冒泡阶段被处理。而且,只能为同一个元素的同一个事件设定一个处理程序(覆盖),也可以通过删除DOMO级方法指定的事件处理程序,只要将属性值设为null即可:

btn.onclick = null;

2.5.3.DOM2级事件处理程序

“DOM2级事件"定义了两个方法,用于处理指定和删除事件处理程序的操作: addEventListener()和removeEventListener()。所有DOM节点都包含这两个方法,并且他们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,则表示在捕获阶段调用事件处理程序如果是false则表示在冒泡阶段调用事件处理程序。

<body>
<button id="myBtn">按钮</button>
	<script type="text/javascript">
		var btn = document.getE1ementById('myBtn')
		btn.addEventListener('c1ick ' ,function({
		alert('you add a eventListener by DOM2 ' )}, false)
		btn. addEventListener( 'click ' ,function(){
		alert('you add a eventListener by DOM2again')}, false)
		function thread({
			alert('you add a eventListener by DOM2第三次')
		}
		btn.addEventListener('click',thread,false)
		btn.removeEventListener('click',thread,false)
	</script>
</body>

BOM事件

BOM的核心对象是window,它表示浏览器的一个实例。window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以window作为其Global对象,因此有权访问parselnt()等方法。如果页面中包含框架,则每个框架都拥有自己的window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引(从0开始,从左至右,从上到下)或者框架的名称来访问相应的window对象。

3.1.Window对象方法

3.1.1.系统对话框

浏览器通过(实际是window对象的方法) alert()、 confirm()、prompt()方法可以调用系统对话框向用户显示消息。

(1)消息框:alert,常用。
	alert()方法用于显示带有一条指定消息和一个OK按钮的警告框。
(2)输入框:prompt,返回提示框中的值。
	prompt()方法用于显示可提示用户进行输入的对话框。参数(可选)︰
		第一个参数:要在对话框中显示的纯文本。
		第二个参数:默认的输入文本。
(3)确认框:confirm,返回true/false.
	confirm()方法用于显示一个带有指定消息和oK及取消按钮的对话框。

3.1.2.打开窗口

window.open()方法既可以导航到一个特定的URL也可以打开一个新的窗口

<script type="text/javascript">function opensxt(){
	window.open('http://www.baidu.com','_self');
	//_self、_b1ank等
	//window.open();
	//空白窗口
</script>
<input type="button" name="open" value="百度" onclick='openBaidu();'/>

3.1.3关闭窗口

window.close():关闭窗口

<input type="button" value="关闭窗口"onclick="window.close();"/>

3.1.4时间函数

3.1.4.1.setTimeout()
setTimeout():在指定的毫秒数后调用函数或计算表达式。返回一个唯一的标识;也可以通过返回的标识cliearTimeout(id):来清除指定函数的执行。

	var id = setTimeout(function,times);
	clearTimeout(id);

3.1.4.2.setlnteval()
setInterval():可按照指定的周期(以毫秒计)来调用函数或计算表达式,也可根据返回的标识用来结束该方法会不停地调用函数,直到clearlnterval()被调用或窗口被关闭。

	var id = setInterval(function,times);
	clearInterval(id) ;
	function test(O{
		console.log("..... ");
	}
	//window是一个全局对象,通过全局对象调用setInterva1()函数
	window.setInterval(test,1000) ;

3.2. history对象

history对象是历史对象。包含用户(在浏览器窗口中)访问过的URL.history对象是window对象的一部分,可通过window.history属性对其进行访问。

  1. history对象的属性: length,返回浏览器历史列表中的URL数量。
  2. history对象的方法:
  3. back():加载history 列表中的前一个URL。
  4. forward():加载历史列表中的下一个URL。当页面第一次访问时,还没有下一个url。
  5. go(number|URL):
  6. URL参数使用的是要访问的URL。而number参数使用的是要访问的URL在History的URL列表中的相对位置。go(-1),到上一个页面

3.3.location对象

  1. location对象是window对象之一,提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。也可通过window.location 属性来访
  2. location对象的属性href:设置或返回完整的URLlocation对象的方
  3. reload():重新加载当前文档。
  4. replace():用新的文档替换当前文档。
<script type="text/javascript">
	function openBaidu(){
		//没有历史记录,用新的文档替换当前文档
		//window . location.rep1ace("http : //www. baidu. com");
		//console.log(window . location.href);//获取完整的url
		window.location.href = "http : //www. baidu.com" ;
	}
</script>
<body>
	<input type="text" value=""/>
	<input type="button" value="刷新" onc1ick="window.1ocation.reload();"/>
	<input type="button" value="百度" onclick="openBaiduO;"/>
</body>

4.DOM对象

DOM: Document Object Model文档对象模型
要实现页面的动态交互效果,bom操作远远不够,需要操作 html才是核心。如何操作 htm,就是DOM。简单的说,dom提供了用程序动态控制 html接口。DOM即文档对象模型描绘了一个层次化的节点树,运行开发人员添加、移除和修改页面的某一部分。dom处于javascript的核心地位上。
每个载入浏览器的HTML文档都会成为Document对象。Document对象使我们可以从脚本中对HTML页面中的所有元素进行访问。Document对象是Window对象的一部分,可通过window.document 属性对其进行访问。
在这里插入图片描述

4.1节点

加载HTML页面时,Web浏览器生成一个树型结构,用来表示页面内部结构。DOM将这种树型结构理解为由节点组成,组成一个节点树。对于页面中的元素,可以解析成以下几种类型的节点:
在这里插入图片描述

	html --> 文档节点
	div --> 元素节点
	title --> 属性节点
	测试 div --> 文本节点

在这里插入图片描述

4.2.1.获取节点

在进行增、删、改的操作时,都需要指定到一个位置,或者找到一个目标,此时我们就可以通过Document对象提供的方法,查找、定位某个对象(也就是我们说的节点)。
注意:操作dom 必须等节点初始化完毕后,才能执行。
处理方式两种:
(1)把script 调用标签移到html末尾即可;
(2)使用onload事件来处理S,等待html加载完毕再加载onload事件里的JS。

	window.onload = function O {//预加载htm1后执行};

在这里插入图片描述
说明: href=“javascript:void(0)”:伪协议,表示不执行跳转,而执行指定的点击事件。

4.2.2.间接查找节点

在这里插入图片描述

4.2.4.删除节点

在这里插入图片描述

<script type="text/javascript">
	function de1Node(){
		var programmer =document.getE1ementById("programmer");
			//从父元素中删除节点,获取要删除对象的父元素,然后从父元素中删除该对象
			programmer.parentNode .removechild(programmer);
	}
</script>
<body>
	<span id="programmer">程序猿</span>
	<a href="javascript:void(0)" onclick="de1Node(); ">删除</a>
</body>

5.表单

表单是我们页面向后台传输数据的一种非常常见的方式,在进行数据发送(请求发出)之前,我们应该现在页面进行一系列数据合法性的验证,节省不必要的错误数据的传输,以及提高用户的体验度。

5.1.获取表单

	1、document.表单名称
	2、document.getElementById(表单id);
	3、document.forms[表单名称]
	4、document.forms[索引;//从0开始
<body>
	<form id='myform' name="myform" action="" method="post"></form>
	<form id='myfdrm2' name="myform2" action="" method="post"></form>
	</body>
<script>
	//四种方式
	var form =document.getE1ementById( "myform") ;
	form =document. myform;
	form =document.forms["myform"];
	form =document.forms[0];
	console.1og(form);
</script>

5.2.获取表单元素

5.2.1.获取input元素

如text password hidden textarea等,前两种常用。

1)、通过id获取: document.getElementById(元素id);
2)、通过form.名称形式获取:myform.元素名称;name属性值
3)、通过name 获取:document.getElementsByName(name属性值)[索引//从0开始
4)、通过 tagName数组:document.getElementsByTagName( 'input')[索引]//从0开始

5.2.2.获取单选按钮

前提:将一组单选按钮设置相同的name属性值
⑴获取单选按钮组:

document.getETementsByName( "name属性值");

⑵遍历每个单选按钮,并查看单选按钮元素的checked属性
若属性值为true表示被选中,否则未被选中
选中状态设定: checked='checked’或checked='true’或checked
未选中状态设定:没有checked属性或checked=‘false’

<form action="" name="myform">
	<input type="text" name="inputName" value="aaa"/>
	<input type="radio" name="rad" value="1"/>1
	<input type="radio" name="rad" value="2"/>2
</form>
<script type="text/javascript">
	var radios = document.getElementsByName('rad');
	//radios[0]. checked = 'checked '
	for(var i = 0; i<radios .length; i++){
		console.log(radios[i].checked + '---' + radios[i].value)
	}
</script>

5.2.3.获取下拉选项

(1)获取select 对象:

var ufrom = document.getE1ementById("ufrom");

(2)获取选中项的索引:

var idx = ufrom. selectedIndex ;

(3)获取选中项options的 value属性值:

var va1 = ufrom. options[idx].value;

注意:当通过options获取选中项的value属性值时,
若没有value属性,则取option标签的内容
若存在value属性,则取value属性的值
(4)获取选中项options的text:

var txt = ufrom. options[idx].text;

选中状态设定: selected=‘selected’、selected=true、selected
未选中状态设定:不设selected属性

5.3.提交表单

(1)使用普通button按钮+onclick事件+事件中编写代码:
获取表单.submit();
(2)使用submit按钮+οnclick=“return函数()”+函数编写代码:
最后必须返回: return true | false;
(3)使用submit按钮/图片提交按钮+表单οnsubmit=“return函数();”+函数编写代码:
最后必须返回: return true | false;
trim()
去除字符串前后空格(不去除字符串中间的空格)

5.4.表单校验

<form id=' myform' name="myform">
姓名:<input type="text" id="uname" name="uname"/><br />密码:<input type="password" id="upwd" name="upwd"/><br />
年龄:<input type="radio" name="uage" value="O" checked="checked" />小屁孩
	<input type="radio" name="uage" value="1"/>你懂得<br />
爱好:<input type="checkbox" name="ufav" value="篮球"/>篮球
	<input type="checkbox" name="ufav" value="爬床"/>爬床
	<input type="checkbox" name="ufav" value="代码"/>代码<br />
来自:<select id="ufrom" name="ufrom">
	<option value="-1" selected="se1ected">请选择</option><option value="O">北京</option>
	<option value="1">上海</option></select><br />
	<div id="validate" style="color: red ; "></div>
	<button type="submit" onclick="return checkForm();">提交</button><button type="reset" onclick="resetForm(O;">重置</button>
</form>
要求:
1、验证用户名
	1)不能为空
	2)长度为6-12位
2、验证密码
	1)不能为空*
	2)长度为6-12位
	3)不能包含用户名
3、年龄:必须选择你懂得
4、爱好:必须选择一项
5、来自:必须选择一项满足以上条件
	1、弹出所有的内容
	2、提交表单
否则
	1、说明错误原因
	2、不能提交表单
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值