JavaScript

1. 主要内容

在这里插入图片描述

2. 事件

事件 (Event) 是 JavaScript 应⽤跳动的⼼脏 ,进⾏交互,使⽹⻚动起来。当我们与浏览器中 Web ⻚
⾯进⾏某些类型的交互时,事件就发⽣了。事件可能是⽤户在某些内容上的点击、⿏标经过某个特定元
素或按下键盘上的某些按键。事件还可能是 Web 浏览器中发⽣的事情,⽐如说某个 Web ⻚⾯加载完
成,或者是⽤户滚动窗⼝或改变窗⼝⼤⼩。
通过使⽤ JavaScript ,你可以监听特定事件的发⽣,并规定让某些事件发⽣以对这些事件做出响应。

作⽤

(1)验证⽤户输⼊的数据。
(2)增加⻚⾯的动感效果。
(3)增强⽤户的体验度

事件类型

JavaScript可以处理的事件类型为:⿏标事件、键盘事件、HTML事件。
http://www.w3school.com.cn/tags/html_ref_eventattributes.asp ⽤+查
Window 事件属性:针对 window 对象触发的事件(应⽤到 标签)
Form 事件:由 HTML 表单内的动作触发的事件(应⽤到⼏乎所有 HTML 元素,但最常⽤在 form 元
素中)
Keyboard 事件 : 键盘事件
Mouse 事件:由⿏标或类似⽤户动作触发的事件
Media 事件:由媒介(⽐如视频、图像和⾳频)触发的事件(适⽤于所有 HTML 元素,但常⻅于媒
介元素中,⽐如 、、、 以及⼏个常⽤的事件:
onclick 、onblur 、onfocus 、onload 、onchange
onmouseover、onmouseout、onkeyup、onkeydown

onload:当⻚⾯或图像加载完后⽴即触发
onblur:元素失去焦点
onfocus:元素获得焦点
onclick:⿏标点击某个对象
onchange:⽤户改变域的内容
onmouseover:⿏标移动到某个元素上
onmouseout:⿏标从某个元素上离开
onkeyup:某个键盘的键被松开
onkeydown:某个键盘的键被按下

事件流和事件模型

我们的事件最后都有⼀个特定的事件源,暂且将事件源看做是HTML的某个元素,那么当⼀个HTML
元素产⽣⼀个事件时,该事件会在元素节点与根节点之间按特定的顺序传播,路径所经过的节点都会受
到该事件,这个传播过程称为DOM事件流。
事件顺序有两种类型:事件捕获事件冒泡
冒泡和捕获其实都是事件流的不同表现,这两者的产⽣是因为IE和Netscape两个⼤公司完全不同的事
件流概念产⽣的。(事件流:是指⻚⾯接受事件的顺序)IE的事件流是事件冒泡,Netscape的事件流是
事件捕获流。
事件冒泡
IE的事件流叫做事件冒泡,即事件开始时由最具体的元素接受,然后逐级向上传播到较为不具体的节
点(⽂档)。例如下⾯的:

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

事件捕获
Netscape提出的另⼀种事件流叫做事件捕获,事件捕获的思想是不太具体的节点应该更早接收到事
件,⽽最具体的节点应该最后接收到事件。事件捕获的⽤意在于在事件到达预定⽬标之前捕获它。还以
前⾯的例⼦为例。
在事件捕获过程中,document对象⾸先接收到click事件,然后沿DOM树依次向下,⼀直传播到事件
的实际⽬标,即元素。
虽然事件捕获是Netscape唯⼀⽀持的事件流模式,但很多主流浏览器⽬前也都⽀持这种事件流模
型。尽管“DOM2级事件”规范要求事件应该从document对象开始时传播,但这些浏览器都是从window
对象开始捕获的。

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

事件处理程序

事件就是⽤户或浏览器⾃身执⾏的某种动作。例如click、load和mouseover都是事件的名字,⽽响应
某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以“on”开头,因此click事
件的事件处理程序就是onclick,为事件指定处理程序的⽅式有好⼏种。

HTML 事件处理程序

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

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

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

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>

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

btn.onclick = null;

DOM2 级事件处理程序

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

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

这种⽅式可以为同⼀个元素的同⼀个事件添加多个处理函数。还可删除事件处理函数,注意,在删除
的时候,不能删除匿名处理函数。

3. BOM对象

BOM的核⼼对象是window,它表示浏览器的⼀个实例。window对象有双重⻆⾊,它既是通过
JavaScript访问浏览器窗⼝的⼀个接⼝,⼜是ECMAScript规定的Global对象。这意味着在⽹⻚中定义的
任何⼀个对象、变量和函数,都以window作为其Global对象,因此有权访问parseInt()等⽅法。如果⻚
⾯中包含框架,则每个框架都拥有⾃⼰的window对象,并且保存在frames集合中。在frames集合中,
可以通过数值索引(从0开始,从左⾄右,从上到下)或者框架的名称来访问相应的window对象。

Window对象⽅法

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

(1)消息框:alert, 常⽤。
alert() ⽅法⽤于显示带有⼀条指定消息和⼀个 OK 按钮的警告框。
(2)输⼊框:prompt,返回提示框中的值。
prompt() ⽅法⽤于显示可提示⽤户进⾏输⼊的对话框。
参数(可选):
第⼀个参数:要在对话框中显示的纯⽂本。
第⼆个参数:默认的输⼊⽂本。
(3)确认框:confirm,返回 true/false.
confirm() ⽅法⽤于显示⼀个带有指定消息和 OK 及取消按钮的对话框。

打开窗⼝
window.open()⽅法既可以导航到⼀个特定的URL也可以⽤来打开⼀个新的窗⼝

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

关闭窗⼝
window.close():关闭窗⼝。
例:点击按钮关闭当前窗⼝

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

时间函数
setTimeout()
setTimeout() : 在指定的毫秒数后调⽤函数或计算表达式。返回⼀个唯⼀的标识;也可以通过返回的
标识cliearTimeout(id): 来清除指定函数的执⾏。

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

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

var id = setInterval(function,times);
clearInterval(id);

history对象

history 对象是历史对象。包含⽤户(在浏览器窗⼝中)访问过的 URL。history 对象是 window 对象
的⼀部分,可通过 window.history 属性对其进⾏访问。
history对象的属性:length,返回浏览器历史列表中的 URL 数量。
history对象的⽅法:
back():加载 history 列表中的前⼀个 URL。
forward():加载历史列表中的下⼀个 URL。当⻚⾯第⼀次访问时,还没有下⼀个url。
go(number|URL): URL 参数使⽤的是要访问的 URL。⽽ number 参数使⽤的是要访问的 URL 在
History 的 URL 列表中的相对位置。go(-1),到上⼀个⻚⾯
013-history.html

<body> <a href="013-history-a.html">013-history-a.html</a> <h1>我是第⼀个⻚⾯</h1> <input type="button" value="前进" onclick="window.history.forward();" />
<script>
console.log(window.history);
</script>
</body>

013-history-a.html

<body> <a href="013-history-b.html">013-history-b.html</a> <h1>我是A⻚⾯</h1> <input type="button" value="后退" onclick="window.history.back();"/>
</body>

013-history-b.html

<body><h1>我是B⻚⾯</h1> <input type="button" value="第⼀个⻚⾯" onclick="window.history.go(-2);"/>
<input type="button" value="后退" onclick="window.history.back();"/>
</body>

location对象

location 对象是window对象之⼀,提供了与当前窗⼝中加载的⽂档有关的信息,还提供了⼀些导航
功能。也可通过 window.location 属性来访问。
location 对象的属性 href:设置或返回完整的 URL
location 对象的⽅法
reload():重新加载当前⽂档。
replace():⽤新的⽂档替换当前⽂档。

4. DOM对象

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

节点

加载 HTML ⻚⾯时,Web 浏览器⽣成⼀个树型结构,⽤来表示⻚⾯内部结构。DOM 将这种树型结构
理解为由节点组成,组成⼀个节点树。对于⻚⾯中的元素,可以解析成以下⼏种类型的节点:
在这里插入图片描述
html --> ⽂档节点
div --> 元素节点
title --> 属性节点
测试 Div --> ⽂本节点

<html><head><title>!!到处都是树!</title>
</head> <body> <div title="属性节点">测试 Div</div>
</body>
</html>

在这里插入图片描述
操作元素的节点
当HTML⽂档在被解析为⼀颗DOM树以后,⾥⾯的每⼀个节点都可以看做是⼀个⼀个的对象,我们称
为DOM对象,对于这些对象,我们可以进⾏各式各样的操作,查找到某⼀个或者⼀类节点对象,可以
创建某种节点对象,可以在某个位置添加节点对象,甚⾄可以动态地删除节点对象,这些操作可以使我
们的⻚⾯看起来有动态的效果,后期结合事件使⽤,就能让我们的⻚⾯在特定时机、特定的事件下执⾏
特定的变换。

获取节点

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

创建节点和插⼊节点

很多时候我们想要在某个位置插⼊⼀个新的节点,此时我们⾸先需要有⼀个节点存在,可以通过以下
⼏种⽅式创建新节点。
创建节点
在这里插入图片描述
插⼊节点
在这里插入图片描述

间接查找节点

在这里插入图片描述

删除节点

在这里插入图片描述

5. 表单

表单是我们⻚⾯向后台传输数据的⼀种⾮常常⻅的⽅式,在进⾏数据发送(请求发出)之前,我们应
该现在⻚⾯进⾏⼀系列数据合法性的验证,节省不必要的错误数据的传输,以及提⾼⽤户的体验度。

获取表单

前两种常⽤

1、document.表单名称
2、document.getElementById(表单 id);
3、document.forms[表单名称]
4、document.forms[索引]; //从 0 开始

获取表单元素

获取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开始

获取单选按钮
前提:将⼀组单选按钮设置相同的name属性值
(1)获取单选按钮组:

document.getElementsByName(“name属性值”);

(2)遍历每个单选按钮,并查看单选按钮元素的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>

获取多选按钮

操作⽅式与单选同理,不同之处在于可以多选

var ufav = document.getElementsByName("ufav");
var favstr = "";
for (i = 0;i < ufav.length; i++){
if(ufav[i].checked){
favstr += ufav[i].value+",";
 }
 }
favstr = favstr.substr(0,favstr.length-1);

获取下拉选项
(1)获取 select 对象
var ufrom = document.getElementById(“ufrom”);
(2)获取选中项的索引:
var idx = ufrom.selectedIndex;
(3)获取选中项 options 的 value属性值:
var val = 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属性

提交表单

(1)使⽤普通button按钮+onclick事件+事件中编写代码:
获取表单.submit();
(2)使⽤submit按钮 + οnclick=“return 函数()” +函数编写代码:
最后必须返回:return true|false;
(3)使⽤submit按钮/图⽚提交按钮 + 表单οnsubmit=“return 函数();” +函数编写代码:
最后必须返回:return true|false;

表单校验

<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="0" 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="selected">请选择</option> <option value="0">北京</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();">重置</button>
</form>
/**
要求:
 1、验证⽤户名
 1)不能为空
 2)⻓度为 6-12 位
 2、验证密码
 1)不能为空 *
 2)⻓度为 6-12 位
 3)不能包含⽤户名
 3、年龄: 必须选择 你懂得
 4、爱好: 必须选择⼀项
 5、来⾃: 必须选择⼀项
满⾜以上条件
1、弹出所有的内容
2、提交表单
否则
1、说明错误原因
2、不能提交表单
*/
// 通过id属性值得到dom对象
function $(id) {
return document.getElementById(id);
}
// 重置表单所有元素 注意函数不能命名为 clear reset 等
function resetForm(){
// 获取说明 div
var validate =$('validate');
validate.innerHTML =""; }
// 表单校验
function checkForm () {
var flag =true;
// 获取说明 div
var validate = $('validate');
validate.innerHTML ="";
// 1、验证⽤户名
// 1)、获取⽤户名的值
var uname = $('uname').value;
// 1)不能为空 -->后期正则处理
// 2)⻓度为 6-12 位
if("" === uname || uname.length == 0 ){
validate.innerHTML += "*⽤户名不能为空</br>";
flag = false;
 }else if(uname.length < 6 || uname.length > 12){
validate.innerHTML += "*⽤户名⻓度在 6-12 位</br>";
flag = false;
 }
 // 2、验证密码
var upwd = $('upwd').value;
// 1)不能为空
// 2)⻓度为 6-12 位
// 3)不能包含⽤户名
if("" === upwd || upwd.length == 0 ){
validate.innerHTML += "*密码不能为空</br>";
flag = false;
 } else if(upwd.length < 6 ||upwd.length > 12){
validate.innerHTML += "*密码⻓度在 6-12 位</br>";
flag = false;
 } else if(uname.length > 0 && upwd.indexOf(uname) >= 0){
validate.innerHTML += "*密码中不能出现⽤户名</br>";
flag = false;
 }
// 3、年龄: 必须选择 你懂得
var ageGroup = document.getElementsByName("uage");
var age ;
for (var i = 0; i < ageGroup.length; i++) {
if(ageGroup[i].checked){
age = ageGroup[i].value;
 }
 }
if(age == 0){
flag = false;
validate.innerHTML += "*⼩屁孩,妈妈喊你回家</br>";
 }
// 4、爱好: 必须选择⼀项
var ufav = document.getElementsByName("ufav");
var favstr = "";
for (i = 0;i < ufav.length; i++){
if(ufav[i].checked){
favstr += ufav[i].value + ",";
 }
 }
favstr = favstr.substr(0,favstr.length-1);
if(favstr.length < 1){
flag = false;
validate.innerHTML += "*⼈⽣真⽆趣</br>";
 }
// 5、来⾃
var ufrom = $('ufrom');
var idx = ufrom.selectedIndex ;
var val = ufrom.options[idx].value;
var valTxt = ufrom.options[idx].text;
if(-1 == val){
flag = false;
validate.innerHTML += "*你来⾃⽕星吗?</br>";
 }
 // 满⾜以上条件 弹出内容
if(flag){
var str = "";
str += "您的姓名是:" + uname + "\n";
str += "您的密码是:" + upwd + "\n";
str += "您的年龄是:" + "可以赢取⽩富美了" + "\n";
str += "您的爱好是:" + favstr + "\n";
str += "您来⾃于:" + valTxt + "\n";
alert(str);
// 设置表单提交的地址
myform.action="http://www.baidu.com";
// 提交表单
myform.submit();
return false;
} else {
return false;
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值