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级事件”规定的事件流包括三个阶段:事件捕获阶段、处于⽬标阶段和事件冒泡阶段。⾸先发
⽣的是事件捕获阶段,为截获事件提供了机会。然后是实际的⽬标接收到事件。最后⼀个阶段是冒泡阶
段,可以在这个阶段对事件做出响应。

在这里插入图片描述

节点

加载 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;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值