目录
引入方式
//方法一,引用外部链接
//外部JS文件中,只包含JS代码,不包含<script>标签
//引入外部js的<script>标签,必须是双标签
//且此时<script>是不能自闭和的:
<script src="js/demo.js"/> //错误
<script src="./js/main.js"></script>
//方法二,直接在html中写
//一般会把脚本置于<body>元素的后面,可改善显示速度
<script>
...
</script>
举例:
<script>
alert(Math.PI);//运行到这步网页会弹出提醒框显示π的值
</script>
//方法三,内联 一般不这样用
<button>
onclick="createParagraph()">
Click me
</button>
基础语法
书写语法
区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的
每行结尾的分号可有可无
大括号{}表示代码块
注释:
单行注释:// 注释内容
多行注释:/* 注释内容 */
js中3种输出语句:
api | 描述 |
---|---|
window.alert() | 警告框 |
document.write() | 在HTML 输出内容 |
console.log() | 写入浏览器控制台 |
变量
JavaScript 是一门弱类型语言,变量可以存放不同类型的值
有var let const
var:相当于定义全局变量,在定义它的语法块之后该文件内该变量仍然有效
let相当于临时变量,只在定义域内有效
const是全局变量,不可修改
应当减少var的使用,能减少很多bug,它是早期ECMAScript5中用于变量声明的关键字
var声明的变量可以接受任何数据类型的值,而且var关键字声明的变量可以重复定义,并且var声明的变量的作用于是全局的:
<script>
{
var x = 1;
x = "张三";
}
alert(x);//等于window.alert(x)
//浏览器照样成功弹出张三
</script>
所以在ECMAScript 6 新增了 let关键字来定义变量,它的用法类似于 var,但是所声明的变量,只在 let关键字所在的代码块内有效,且不允许重复声明。
数据类型和运算符
虽然js是弱数据类型的语言,但是js中也存在数据类型,js中的数据类型分为 :原始类型 和 引用类型,具体有如下类型
数据类型 | 描述 |
---|---|
number | 数字(整数、小数、NaN(Not a Number)) |
string | 字符串,单双引皆可 |
boolean | 布尔。true,false |
null | 对象为空 |
undefined | 当声明的变量未初始化时,该变量的默认值是 undefined |
使用typeof函数可以返回变量的数据类型
<script>
//原始数据类型
alert(typeof 3); //number
alert(typeof 3.14); //number
alert(typeof "A"); //string
alert(typeof 'Hello');//string
alert(typeof true); //boolean
alert(typeof false);//boolean
alert(typeof null); //object
var a ;
alert(typeof a); //undefined
</script>
js中的运算规则绝大多数还是和java中一致的,具体运算符如下
运算规则 | 运算符 |
---|---|
算术运算符 | + , - , * , / , % , ++ , – |
赋值运算符 | = , += , -= , *= , /= , %= |
比较运算符 | > , < , >= , <= , != , == ,=== |
逻辑运算符 | && , || , ! |
三元运算符 | 条件表达式 ? true_value: false_value |
绝大多数的运算规则和java中是保持一致的,但是注意 == 会进行类型转换,=== 不会进行类型转换。
==:只比较值是否相等,不区分数据类型,哪怕类型不一致,==也会自动转换类型进行值得比较
===:不光比较值,还要比较类型,如果类型不一致,直接返回false
<script>
var age = 20;
var _age = "20";
var $age = 20;
alert(age == _age);//true ,只比较值
alert(age === _age);//false ,类型不一样
alert(age === $age);//true ,类型一样,值一样
</script>
虽然不区分数据类型,但是有时候涉及到数值计算,还是需要进行类型转换的,js中可以通过parseInt()函数来进行将其他类型转换成数值类型
// 类型转换 - 其他类型转为数字
alert(parseInt("12")); //12
alert(parseInt("12A45")); //12
alert(parseInt("A45"));//NaN (not a number)
还有非常重要的一点是:0,null,undefined,“”,NaN理解成false,反之理解成
true。
for,while,switch,三目运算符与java一致,不再演示。
函数function
第一种定义格式
function 函数名(参数1,参数2..){
要执行的代码
}
function add(x){//不需要写参数类型,不需要写返回类型,极度松散
return x+1;
}
console.log(add(5));//输出6
function add() {//参数表都可以不写,arguments默认是参数表数组,这里写了个求和函数
let sum = 0;
for (let i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum;
}
console.log(add(1, 2, 3));//返回6
因为JavaScript是弱数据类型的语言,所以有如下几点需要注意:
形式参数不需要声明类型,并且JavaScript中不管什么类型都是let或者var去声明,加上也没有意义。
返回值也不需要声明类型,直接return即可
第二种定义格式
第二种可以通过var去定义函数的名字,具体格式如下:
var functionName = function (参数1,参数2..){
//要执行的代码
}
var add = function(a,b){
return a + b;
}
var result = add(10,20,30,40);
//浏览器打开,发现没有错误,并且依然弹出30,这是为什么呢?
//因为在JavaScript中,函数的调用只需要名称正确即可,参数列表不管的。
//而30和40没有变量接受,但是不影响函数的正常调用。
闭包
//直接上代码通俗易懂,只是听起来高级
function add(a){//返回的是一个函数
return function(b){
return a+b;
};
};
let x=add(33);//x被赋值成函数了
let sum=x(11);//sum为44
console.log(sum);
一些其他数组库函数
forEach、 map、 filter 函数在平时运用的也比较多,可参考MDN文档。
对象
基本对象
Array对象
let a = new Array();//注意俩种写法括号不同
let b = [];
let c = ['tree', 795, [0, 1, 2]];//语法极度松散,使用字符的字符串用单引号和双引号没有区别,即""内部没有"" ,''内部没有'',如果字符串内有就要用/这个符号来转义
var d = new Array(1,2,3,4); //1,2,3,4 是存储在数组中的数据(元素)
a[0] = "12"; a[1] = "123"; a[5] = "134";
a[4] = 5;
a.push(100);//在末尾操作
a.pop();
//a.reverse();//与C++类似
a.shift();//删除第一个元素
a.unshift("12");//在数组头插入
//更多方法见https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array
for (let i = 0; i < a.length; i++) {
console.log(a[i]);
}//未定义的下标2 3则输出undefined
for (i in a) {//i遍历a中不是空的下标,所以这里只会输出a中已经定义的
console.log(a[i]);//注意i是下标 与C++不同
}
ES新特性使用for(elem of collection)而不是for(elem in collection)
与java中不一样的是,JavaScript中数组相当于java中的集合,数组的长度是可以变化的。JavaScript是弱数据类型的语言,所以数组中可以存储任意数据类型的值。
再补充一些方法
//forEach()函数
//没有元素的内容是不会输出的,因为forEach只会遍历有值的元素 即空位置不会输出undefined
//e是形参,接受的是数组遍历时的值
arr.forEach(function (e) {
console.log(e);
})
//在ES6中,引入箭头函数的写法,语法类似java中lambda表达式
arr.forEach((e) => {
console.log(e);
})
//splice: 删除元素
//参数1:表示从哪个索引位置删除 参数2:表示删除元素的个数
arr.splice(2,2);
console.log(arr);
String对象
String对象的创建方式有2种:
var 变量名 = new String("…") ; //方式一
var 变量名 = "…" ; //方式二
属性和方法
console.log(str.length);//length
//charAt()函数用于返回在指定索引位置的字符,函数的参数就是索引。
console.log(str.charAt(4));
//indexOf()函数用于检索指定内容在字符串中的索引位置的,返回值是索引,参数是指定的内容
console.log(str.indexOf("lo"));
var s = str.trim();//去除字符串两边的空格
//substring()函数用于截取字符串的
//参数1:表示从那个索引位置开始截取。包含
//参数2:表示到那个索引位置结束。不包含
console.log(s.substring(0,5));
自定义对象
自定义对象与其他语言有所不同语法格式如下:
var 对象名 = {
属性名1: 属性值1,
属性名2: 属性值2,
属性名3: 属性值3,
函数名称: function(形参列表){}
};
//注意后面还有个;别忘记
//我们可以通过如下语法调用属性和函数:
对象名.属性名
对象名.函数名()
let xiaoming = new Object();
xiaoming = {//直接let xiaoming = {}也行 语法松散
name: "ming",//注意要用: 用=就会报错 易错点!
age: 15,//注意这里是用逗号,易错!
email: "12345@qq.com",
parents: {//对象里面的对象
father: "tan",
mother: "fang",
},
id: "12138"//最后一个,可缺省或者写,
};
console.log(xiaoming.name, xiaoming.id, xiaoming.parents.father);
//JavaScript比较宽松 是可以这样输出的,console.log是在页面的F12控制台里输出
//也可以像下面这样使用
console.log(xiaoming["parents"]["father"],xiaoming["age"]);
//注意变量要加双引号否则报错
xiaoming.parents.grandfather = "tan";//往parents对象里多增加了个变量并赋值
输出结果:
JSON对象
JSON对象:JavaScript Object Notation,JavaScript对象标记法。是通过JavaScript标记法书写的文本。其格式如下:
{
"key":value,
"key":value,
"key":value
}
//注意 JavaScript对象定义后面是有;的 json没有
其中,key必须使用引号并且是双引号标记,单引号不行!value可以是任意数据类型,value的数据类型为:
数字(整数或浮点数)
字符串(在双引号中,单引号不行)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
那么json这种数据格式的文本到底应用在企业开发的什么地方呢?-- 经常用来作为前后台交互的数据载体。如下图所示:前后台交互时,我们需要传输数据,但是java中的对象我们该怎么去描述呢?我们可以使用如图所示的xml格式,可以清晰的描述java中需要传递给前端的java对象。
但是xml格式存在如下问题:
标签需要编写双份,占用带宽,浪费资源
解析繁琐
所以我们可以使用json来替代,如下图所示:
接下来我们通过代码来演示json对象:注释掉之前的代码,编写代码如下:
var jsonstr = '{"name":"Tom", "age":18, "addr":["北京","上海","西安"]}';
alert(jsonstr.name);
浏览器输出结果是undefined,为什么呢?因为上述是一个json字符串,不是json对象,所以我们需要借助如下函数来进行json字符串和json对象的转换。添加代码如下:
var obj = JSON.parse(jsonstr);
alert(obj.name);
此时输出正确:
当然了,我们也可以通过如下函数将json对象再次转换成json字符串。添加如下代码:
alert(JSON.stringify(obj));
输出结果:
BOM对象
BOM的全称是Browser Object Model,翻译过来是浏览器对象模型。也就是JavaScript将浏览器的各个组成部分封装成了对象。我们要操作浏览器的部分功能,可以通过操作
BOM对象的相关属性或者函数来完成。例如:我们想要将浏览器的地址改为http://www.baidu.com ,我们就可以通过BOM中提供的location对象的href属性来完成,代码如下:
location.href='http://www.baidu.com'
BOM中提供了如下5个对象:
对象名称 | 描述 |
---|---|
Window | 浏览器窗口对象 |
Navigator | 浏览器对象 |
Screen | 屏幕对象 |
History | 历史记录对象 |
Location | 地址栏对象 |
上述5个对象与浏览器各组成对应的关系如下图所示:
对于上述5个对象,我们重点学习Window对象、Location对象这2个。
Window对象
window对象指的是浏览器窗口对象,是JavaScript的全部对象,所以对于window对象,我们可以直接使用,并且对于window对象的方法和属性,我们可以省略window.例如:我们之前学习的alert()函数其实是属于window对象的,其完整的代码如下:indow.alert(‘hello’);其可以省略window. 所以可以简写成alert(‘hello’)
所以对于window对象的属性和方法,我们都是采用简写的方式。window提供了很多属性和方法,下表列出了常用属性和方法
属性 | 描述 |
---|---|
history | 用于获取history对象,对 history 对象的只读引用 |
location | 用于获取location对象 |
Navigator | 用于获取Navigator对象,对 Navigator 对象的只读引用 |
Screen | 用于获取Screen对象 |
也就是说我们要使用location对象,只需要通过代码window.location 或者简写location 即可使用。window也提供了一些常用的函数:
函数 | 描述 |
---|---|
alert() | 显示带有一段消息和一个确认按钮的警告框。 |
comfirm() | 显示带有一段消息以及确认按钮和取消按钮的对话框。 |
setInterval() | 按照指定的周期(以毫秒计)来调用函数或计算表达式。 |
setTimeout() | 在指定的毫秒数后调用函数或计算表达式。 |
下面进行演示
confirm("您确认删除该记录吗?");
这个函数有一个返回值,当用户点击确认时,返回true,点击取消时,返回false。我们根据返回值来决定是否执行后续操作。
setInterval(fn,毫秒值):定时器,用于周期性的执行某个功能,并且是循环执行。该函数需要传递2个参数:fn:函数,需要周期性执行的功能代码 毫秒值:间隔时间
//定时器 - setInterval -- 周期性的执行某一个函数
var i = 0;
setInterval(function () {
i++;
console.log("定时器执行了" + i + "次");
}, 2000);
刷新页面,浏览器每个一段时间都会在控制台输出,结果如下:
setTimeout(fn,毫秒值) :定时器,只会在一段时间后执行一次功能。参数和上述
setInterval一致
Location对象
location是指代浏览器的地址栏对象,对于这个对象,我们常用的是href属性,用于获取或者设置浏
览器的地址信息,添加如下代码:
//获取浏览器地址栏信息
alert(location.href);
//设置浏览器地址栏信息
location.href = "https://www.baidu.com";
浏览器效果如下:首先弹框展示浏览器地址栏信息,
然后点击确定后,因为我们设置了地址栏信息,所以浏览器跳转到百度首页
DOM对象
DOM介绍
DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析,而 HTML 文档是浏览器解析。封装的对象分为
Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象
如下图,左边是 HTML 文档内容,右边是 DOM 树
可用谷歌插件HTML Tree Generator看某网站的DOM结构
那么我们学习DOM技术有什么用呢?主要作用如下:
改变 HTML 元素的内容
改变 HTML 元素的样式(CSS)
对 HTML DOM 事件作出反应
添加和删除 HTML 元素
总而达到动态改变页面效果目的
获取DOM对象
HTML中的Element对象可以通过Document对象获取,而Document对象是通过window对象获取的。
document对象提供的用于获取Element元素对象的api如下表所示:
函数 | 描述 |
---|---|
document.getElementById() | 根据id属性值获取,返回单个Element对象 |
document.getElementsByTagName() | 根据标签名称获取,返回Element对象数组 |
document.getElementsByName() | 根据name属性值获取,返回Element对象数组 |
document.getElementsByClassName() | 根据class属性值获取,返回Element对象数组 |
document;//直接返回整个页面的DOM
document.getElementsByTagName("body");//返回所有能找到的body标签元素
document.getElementsByTagName("body")[0];//返回第一个body集合中的第一个元素,这个返回的才是html中的body标签
document.getElementById("ID1");//通过CSS选择器id来找,注意Element不是复数形式,因为CSS的ID是唯一的
document.getElementsByName("x");//返回name属性为x的对象的集合。
document.getElementsByClassName("box1");//通过CSS选择器class来找
//更常用的是querySelectorall,语法跟jQuery类似,需要熟悉CSS选择器:
document.querySelector();//自上而下找到第一个符合的文档中匹配指定 CSS 选择器的元素。
document.querySelectorAll();//返回所有符合条件的元素
用法举例:
document.querySelector("h1");//返回第一个h1标签
document.querySelector("ul li");//返回第一个ul标签的第一个li标签
document.querySelectorAll("#sp-list li.list");//返回id为sp-list标签中所有class为list的li标签
操作DOM对象
那么获取到标签了,我们如何操作标签的属性呢?通过查询文档资料,如下图所示:
得出我们可以通过div标签对象的innerHTML属性来修改标签的内容。比如此时我们想把页面中的文本进行替,获取2个div中的第一个,所以可以通过下标0获取数组中的第一个div,编写如下代码:
var divs = document.getElementsByClassName('cls');
var div1 = divs[0];
div1.innerHTML = "666";
vscode打开网页可以发现页面文本更换成了666
我们还可以再网页console控制平台中进行修改,这样只会在网页上修改,文件内代码不变,F5就复原了,可以在console中即使渲染查看效果,找到合适的样式再写入代码。
document.querySelector("h1").style.color="blue";//将第一个h1标签的颜色改为blue。
//注意!DOM语法采用驼峰命名,与CSS内的写法有所不用,假如CSS内写成background-color,DOM中则是backgroundColor
还可以这样:
var x1=document.querySelector("h1").style.color;//可以将这个写入外置script文件中
x1="blue";
给选择的元素加类、删类:
document.querySelector("h1").classList;//返回第一个h1的所有class
document.querySelector("h1").classList.add("");
document.querySelector("h1").classList.remove("");
假如网页中设置一个按钮,按一下第一段变成某个CSS样式,再按一下则复原,可以用 toggle()方法,其当插入class:title1成功返回true,删除成功则返回false:
document.querySelector("h1").classList.toggle("title1");
或者直接事件监听器给这个按钮加个事件,也达到同样效果:
document.querySelector("button").addEventListener("click",function(){
document.querySelector("h1").classList.toggle("title1");
});
//addEventListener()第一个参数传入的是事件,这里传入click,点击则触发,第二个参数是触发后执行什么操作,所以是function形式
上面都是修改css样式,下面则是修改hmtl语句:
document.querySelector("h1").innerHTML="Goodbye!";//将h1标签的内容修改为Goodbye!
document.querySelector("h1").innerHTML="<em>Goodbye!</em>";//还可以这样加入标签,Goodbye!则呈现为被强调的文本
document.querySelector("h1").textContent;//这句返回的是h1标签里的文本内容 所以返回"Goodbye!"
document.querySelector("h1").innerHTML;//这句返回的是h1标签里面的内容 所以是:"<em>Goodbye!</em>"
对标签属性的操作:
document.querySelector("body").attributes;//返回body标签的所有属性,包括属性个数属性名字等等各种信息
document.querySelector("body").getAttribute("id");//返回body的id属性
document.querySelector("body").attributes.id.value;//返回body标签的id属性的名字
document.querySelector("body").attributes.id.value="id1";//修改id
document.querySelector("body").setAttribute("class","box1");//给body添加属性,第一个是属性类型,第二个是属性键值,这里给body添加一个定义为box1的选择器
案例
案例需求如下3个:点亮灯泡、将所有的div标签的标签体内容后面加上:very good、使所有的复选框呈现被选中的状态
————————————————>
原始代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initialscale=
1.0">
<title>JS-对象-DOM-案例</title>
</head>
<body>
<img id="h1" src="img/off.gif"> <br><br>
<div class="cls">div1</div> <br>
<div class="cls">div2</div> <br>
<input type="checkbox" name="hobby"> 电影
<input type="checkbox" name="hobby"> 旅游
<input type="checkbox" name="hobby"> 游戏
</body>
<script>
</script>
</html>
把灯泡点亮,其实就是换一张图片。首先获取img标签对象然后修改img标签对象的src属性值,进行图片的切换:
//1. 点亮灯泡 : src 属性值
//首先获取img标签对象
var img = document.getElementById('h1');
//然后修改img标签对象的src属性值,进行图片的切换
img.src = "img/on.gif";
在原有内容后面追加红色的very good,通过标签的名字div获取所有的div标签遍历所有的div标签获取div标签的原有内容,然后追加<font color=‘red’>very good</font>,并且替原内容
//2. 将所有div标签的内容后面加上: very good (红色字体) -- <font color='red'></font>
var divs = document.getElementsByTagName('div');
for (let i = 0; i < divs.length; i++) {
const div = divs[i];
div.innerHTML += "<font color='red'>very good</font>";
}
要让复选框处于选中状态,那么什么属性或者方法可以使复选框选中?可以查询资料得出checkbox标签对象的checked属性设置为true,可以改变checkbox为选中状态。
//3. 使所有的复选框呈现选中状态
var ins = document.getElementsByName('hobby');
for (let i = 0; i < ins.length; i++) {
const check = ins[i];
check.checked = true;//选中
}
javascript事件
javascript事件简介
如下图所示的百度注册页面,当我们用户输入完内容,百度可以自动的提示我们用户名已经存在还是可以使用。那么百度是怎么知道我们用户名输入完了呢?这就需要用到JavaScript中的事件了。什么是事件呢?HTML事件是发生在HTML元素上的 “事情”,例如:按钮被点击、鼠标移到元素上、输入框失去焦点。而我们可以给这些事件绑定函数,当事件触发时,可以自动的完成对应的功能。这就是事件监听。
对于我们所说的百度注册页面,我们给用户名输入框的失去焦点事件绑定函数,当我们用户输入完内容,在标签外点击了鼠标,对于用户名输入框来说,失去焦点,然后执行绑定的函数,函数进行用户名内容的校验等操作。、
javascript事件绑定
JavaScript对于事件的绑定提供了2种方式:
方式1:通过html标签中的事件属性进行绑定。例如一个按钮,我们对于按钮可以绑定点击事件,可以借助标签的onclick属性,属性值指向一个函数。
<input type="button" 1 id="btn1" value="事件绑定1" onclick="on()">
我们需要创建该函数:
<script>
function on(){
alert("按钮1被点击了...");
}//浏览器打开,然后点击按钮,弹框
</script>
方式2:通过DOM中Element元素的事件属性进行绑定
依据我们学习过得DOM的知识点,我们知道html中的标签被加载成element对象,所以我们也可以通过element对象的属性来操作标签的属性。此时我们再次添加一个按钮,代码如下:
<input type="button" id="btn2" value="事件绑定2">
先通过id属性获取按钮对象,然后操作对象的onclick属性来绑定事件,代码如下:
<script>
document.getElementById('btn2').onclick = function(){
alert("按钮2被点击了...");
}//浏览器打开,然后点击按钮,弹框
</script>
常见javascript事件
事件属性名 | 说明 |
---|---|
onclick | 鼠标单击事件 |
onblur | 元素失去焦点 |
onfocus | 元素获得焦点 |
onkeydown | 某个键盘的键被按下 |
onload | 某个页面或图像被完成加载 |
onsubmit | 当表单提交时触发该事件 |
onmouseover | 鼠标被移到某元素之上 |
onmouseout | 鼠标从某元素移开 |
代码演示:
<!DOCTYPE html>
<html lang="en">
<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>JS-事件-常见事件</title>
</head>
<body onload="load()">
<form action="" style="text-align: center;" onsubmit="subfn()">
<input type="text" name="username" onblur="bfn()" onfocus="ffn()" onkeydown="kfn()">
<input id="b1" type="submit" value="提交">
<input id="b1" type="button" value="单击事件" onclick="fn1()">
</form>
<br><br><br>
<table width="800px" border="1" cellspacing="0" align="center" onmouseover="over()" onmouseout="out()">
<tr>
<th>学号</th>
<th>姓名</th>
<th>分数</th>
<th>评语</th>
</tr>
<tr align="center">
<td>001</td>
<td>张三</td>
<td>90</td>
<td>很优秀</td>
</tr>
<tr align="center">
<td>002</td>
<td>李四</td>
<td>92</td>
<td>优秀</td>
</tr>
</table>
</body>
<script>
//onload : 页面/元素加载完成后触发
function load(){
console.log("页面加载完成...")
}
//onclick: 鼠标点击事件
function fn1(){
console.log("我被点击了...");
}
//onblur: 失去焦点事件
function bfn(){
console.log("失去焦点...");
}
//onfocus: 元素获得焦点
function ffn(){
console.log("获得焦点...");
}
//onkeydown: 某个键盘的键被按下
function kfn(){
console.log("键盘被按下了...");
}
//onmouseover: 鼠标移动到元素之上
function over(){
console.log("鼠标移入了...")
}
//onmouseout: 鼠标移出某元素
function out(){
console.log("鼠标移出了...")
}
//onsubmit: 提交表单事件
function subfn(){
alert("表单被提交了...");
}
</script>
</html>
我们可以通过浏览器打开来观察几个常用事件的具体效果:
onfocus:获取焦点事件,鼠标点击输入框,输入框中光标一闪一闪的,就是输入框获取焦点了
onblur:失去焦点事件,前提是输入框获取焦点的状态下,在输入框之外的地方点击,光标从输入框中消失了,这就是失去焦点。
其他事件的效果可以自己试验。
javascript事件案例
基础代码如下:
<!DOCTYPE html>
<html lang="en">
<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>JS-事件-案例</title>
</head>
<body>
<img id="light" src="img/off.gif"> <br>
<input type="button" value="点亮" >
<input type="button" value="熄灭" >
<br> <br>
<input type="text" id="name" value="ITCAST" >
<br> <br>
<input type="checkbox" name="hobby"> 电影
<input type="checkbox" name="hobby"> 旅游
<input type="checkbox" name="hobby"> 游戏
<br>
<input type="button" value="全选" >
<input type="button" value="反选" >
</body>
<script>
//1. 点击 "点亮" 按钮, 点亮灯泡; 点击 "熄灭" 按钮, 熄灭灯泡;
//2. 输入框聚焦后, 展示小写; 输入框离焦后, 展示大写;
//3. 点击 "全选" 按钮使所有的复选框呈现选中状态 ; 点击 "反选" 按钮使所有的复选框呈现取消勾选的状态 ; -- onclick
</script>
</html>
需求1
首先给点亮按钮和熄灭按钮都绑定单击事件。分别绑定函数on()和off()
然后在js中定义on()和off()函数
on()函数中,通过id获取img标签对象,然后通过img标签对象的src属性切换点亮的图片
off()函数中,通过id获取img标签对象,然后通过img标签对象的src属性切换熄灭的图片
<input type="button" value="点亮" onclick="on()">
<input type="button" value="熄灭" onclick="off()">
//1. 点击 "点亮" 按钮, 点亮灯泡; 点击 "熄灭" 按钮, 熄灭灯泡; -- onclick
function on(){
//a. 获取img元素对象
var img = document.getElementById("light");
//b. 设置src属性
img.src = "img/on.gif";
}
function off(){
//a. 获取img元素对象
var img = document.getElementById("light");
//b. 设置src属性
img.src = "img/off.gif";
}
需求2
给input标签的onfocus和onblur事件分别绑定lower()和upper()函数
然后在js中定义lower()和upper()函数
对于lower()函数,先通过id获取输入框对象,然后通过输入框的value属性来设置内容,
内容的话可以通过字符串的toLowerCase()函数来进行小写转换
对于upper()函数,先通过id获取输入框对象,然后通过输入框的value属性来设置内容,
内容的话可以通过字符串的toupperCase()函数来进行大写转换
<input type="text" id="name" value="ITCAST" onfocus="lower()" onblur="upper()">
//2. 输入框聚焦后, 展示小写; 输入框离焦后, 展示大写; -- onfocus , onblur
function lower(){//小写
//a. 获取输入框元素对象
var input = document.getElementById("name");
//b. 将值转为小写
input.value = input.value.toLowerCase();
}
function upper(){//大写
//a. 获取输入框元素对象
var input = document.getElementById("name");
//b. 将值转为大写
input.value = input.value.toUpperCase();
}
需求3
给全选和反选按钮绑定单击事件,分别绑定函数checkAll()和reverse()
在js中定义checkAll()和reverse()函数
对于checkAll()函数,首先通过name属性值为hobby来获取所有的复选框,然后遍历复选
框,设置每个复选框的checked属性为true即可
对于reverse()函数,首先通过name属性值为hobby来获取所有的复选框,然后遍历复选
框,设置每个复选框的checked属性为false即可
<input type="button" value="全选" onclick="checkAll()">
<input type="button" value="反选" onclick="reverse()">
//3. 点击 "全选" 按钮使所有的复选框呈现选中状态 ; 点击 "反选" 按钮使所有的复选框呈现取消勾选的状态 ; -- onclick
function checkAll(){
//a. 获取所有复选框元素对象
var hobbys = document.getElementsByName("hobby");
//b. 设置选中状态
for (let i = 0; i < hobbys.length; i++) {
const element = hobbys[i];
element.checked = true;
}
}
function reverse(){
//a. 获取所有复选框元素对象
var hobbys = document.getElementsByName("hobby");
//b. 设置未选中状态
for (let i = 0; i < hobbys.length; i++) {
const element = hobbys[i];
element.checked = false;
}
}
完整代码:
<!DOCTYPE html>
<html lang="en">
<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>JS-事件-案例</title>
</head>
<body>
<img id="light" src="img/off.gif"> <br>
<input type="button" value="点亮" onclick="on()">
<input type="button" value="熄灭" onclick="off()">
<br> <br>
<input type="text" id="name" value="ITCAST" onfocus="lower()" onblur="upper()">
<br> <br>
<input type="checkbox" name="hobby"> 电影
<input type="checkbox" name="hobby"> 旅游
<input type="checkbox" name="hobby"> 游戏
<br>
<input type="button" value="全选" onclick="checkAll()">
<input type="button" value="反选" onclick="reverse()">
</body>
<script>
//1. 点击 "点亮" 按钮, 点亮灯泡; 点击 "熄灭" 按钮, 熄灭灯泡; -- onclick
function on(){
//a. 获取img元素对象
var img = document.getElementById("light");
//b. 设置src属性
img.src = "img/on.gif";
}
function off(){
//a. 获取img元素对象
var img = document.getElementById("light");
//b. 设置src属性
img.src = "img/off.gif";
}
//2. 输入框聚焦后, 展示小写; 输入框离焦后, 展示大写; -- onfocus , onblur
function lower(){//小写
//a. 获取输入框元素对象
var input = document.getElementById("name");
//b. 将值转为小写
input.value = input.value.toLowerCase();
}
function upper(){//大写
//a. 获取输入框元素对象
var input = document.getElementById("name");
//b. 将值转为大写
input.value = input.value.toUpperCase();
}
//3. 点击 "全选" 按钮使所有的复选框呈现选中状态 ; 点击 "反选" 按钮使所有的复选框呈现取消勾选的状态 ; -- onclick
function checkAll(){
//a. 获取所有复选框元素对象
var hobbys = document.getElementsByName("hobby");
//b. 设置选中状态
for (let i = 0; i < hobbys.length; i++) {
const element = hobbys[i];
element.checked = true;
}
}
function reverse(){
//a. 获取所有复选框元素对象
var hobbys = document.getElementsByName("hobby");
//b. 设置未选中状态
for (let i = 0; i < hobbys.length; i++) {
const element = hobbys[i];
element.checked = false;
}
}
</script>
</html>