JavaScript基础知识学习笔记

参考手册

引入方式

//方法一,引用外部链接
//外部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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值