提交: onsubmit
在表单提交的时候会触发这个事件
如果这个事件返回true表示可以提交, 如果返回false表示阻止提交
事件加给form元素
重置: onreset
在表单提交的时候会触发这个事件
如果这个事件返回true表示重置, 如果返回false表示阻止重置
事件加给form元素
聚焦: onfocus
失焦: onblur
3.4添加给表单元素, 3在表单的文本选中的时候触发这个事件, 4在表单的文本失去焦点的时候触发这个事件
form.onsubmit = function(){ if(form.userName.value == '' || form.pass.value == ''){ alert('请输入账号和密码'); return false; } else { return true; } } form.onreset = function(){ // console.log('重置了'); if(confirm('是否重置')){ return true; } else { return false; } } form.pass.onfocus = function(){ // 判断当前输入框是否可输入 console.log(1); } form.pass.onblur = function(){ // 密码校验、文本输入是否正确 console.log(2); }open: 打开新窗口; open(url, 打开窗口的方式, 特殊字符串, 是否取代之前的网页的浏览记录); 返回新窗口的window
_self: 自身打开 _blank: 打开新的页面
var newWindow = open('a.html', '_blank', 'width=800px,height=800px;'); close: 关闭浏览器 window.close(); 关闭当前浏览器可以省略window <!-- 行间, window不能省略 --> <div onclick="window.close();">关闭</div> newWindow.close(); close();向前进: history.forword(); 向前跳转一个页面
向后退: history.back(); 向后退一个页面
跳转到: history.go(参数); 参数为数字, 跳转到第几个页面, 正数–> 前 负数—>后 0—>刷新
history.forward(); history.go(1); history.go(0); history.back();clientTop: 上边框 clientLeft: 左边框
var div = document.getElementsByTagName('div')[0]; console.log(div.clientHeight); // 200 + 20 + 5 console.log(div.clientWidth); // 200 + 10 + 1 console.log(div.clientTop); console.log(div.clientLeft); // 屏幕的可视宽高: console.log(document.documentElement.clientHeight); console.log(document.documentElement.clientWidth); // body的可视宽高 console.log(document.body.clientHeight); console.log(document.body.clientWidth);元素的占位(实际)宽高
元素.offsetWidth/元素.offsetHeight: padding + content + border
元素.offsetTop: 当前元素的顶部到定位父元素顶部的距离, 如果没有定位父元素, 到body顶部的距离;
元素.offsetLeft: 当前元素的左边到定位父元素左边的距离, 如果没有定位父元素, 到body左边的距离;
console.log(div.offsetHeight); // 20 + 5 + 200 + 20 + 20 console.log(div.offsetWidth); // 251 console.log(div.offsetTop); console.log(div.offsetLeft);页面/元素被卷去的高度
元素.scrollWidth/元素.scrollHeight: 元素实际内容的宽高
元素.scrollTop: 页面/元素被卷去的高度
元素.scrollLeft: 页面/元素被卷去的宽度
onscroll: 窗口滚动条滚动时所触发的事件
页面滚动的距离:
document.documentElement.scrollTop || document.body.scrollTop
document.documentElement.scrollLeft || document.body.scrollLeft
window.onscroll = function(){ console.log(document.documentElement.scrollTop); console.log(document.body.scrollTop); var top = document.documentElement.scrollTop || document.body.scrollTop; var left = document.documentElement.scrollLeft || document.body.scrollLeft; console.log(top, left); }事件处理函数: 当事件发生时所调用的函数
div.onlick = function(){} onlick后面的就是事件处理函数
div.onclick = a; a就是事件处理函数
var div = document.getElementsByTagName('div')[0]; div.onclick = function () { alert(1); } function a(){ alert(2); } div.onclick = a;事件对象: 当事件发生的时候, 浏览器会将事件相关的信息(事件类型, 触发源, 鼠标的位置, 距离各个屏幕、元素的位置等等)存储在事件对象中, event
ie\chrome\高版本ff: window.event
低版本ff: 事件处理函数的第一个参数传递
兼容: var evs = window.event || ev;
常用属性
var evs = window.event || ev; console.log(evs); console.log(evs.type); // 事件类型 console.log(evs.target); // 事件触发源, ie8+ console.log(evs.srcElement); // 事件触发源 console.log(evs.target || evs.srcElement); console.log(evs.clientX, '------', evs.clientY); // 鼠标相对于屏幕的位置 console.log(evs.pageX, '-----', evs.pageY); // 鼠标相对于body的距离 console.log(evs.ctrlKey, evs.altKey, evs.shiftKey); // 判断相对应的键是否被按下, 返回true和false标签.事件 这种方式所添加的事件, 如果给同一个元素添加同一个事件, 那么后面的会覆盖前面的;
事件绑定
标准: 标签.addEventListener(事件类型(不加on), 事件处理函数(函数名), 是否捕获(默认false)); function a(){ console.log(1); } function b(){ console.log(2); } div.addEventListener('click', a, false); div.addEventListener('click', b, false); ie: 标签.attachEvent(on+事件类型, 事件处理函数); // ie console.log(div.attachEvent); // 标准: undefined div.attachEvent('onclick', a); div.attachEvent('onclick', b); 区别 标准事件绑定ie事件绑定事件类型: 标准不加onie要加on有捕获ie中没有执行顺序是正序执行ie中是倒叙执行this的指向不同: 标准中指向触发源ie中指向window标签.事件 取消事件: 标签.事件 = null;
事件解绑
标准: 标签.removeEventListener(事件类型(不加on), 事件处理函数(函数名), 是否捕获(默认false));
ie: 标签.detachEvent(on+事件类型, 事件处理函数);
if(div.removeEventListener){ // 标准 div.removeEventListener('click', a, false); } else { // ie div.detachEvent('onclick', a); }事件流: 当事件发生的时候, 从父节点到子节点之间固定的执行顺序
事件捕获阶段:当事件发生的时候, 将事件从window向子元素依次传递
确定目标阶段: 确定事件目标
冒泡处理阶段: 事件目标开始处理事件, 处理完成之后将事件从子元素依次传递到父元素, 到window结束
阻止冒泡
标准: evs.stopPropagation();
ie: evs.cancelBubble = true;
兼容:
evs.stopPropagation ? evs.stopPropagation() : evs.cancelBubble = true;
一个加()一个不加(), 兼容就用带()来判断
var divs = document.getElementsByTagName('div'); function a(ev){ var evs = event || ev; console.log(evs.stopPropagation); // ie undefined console.log(this); // evs.stopPropagation(); // evs.cancelBubble = true; evs.stopPropagation ? evs.stopPropagation() : evs.cancelBubble = true; } /* 阻止冒泡: 标准: evs.stopPropagation(); ie: evs.cancelBubble = true; 兼容: evs.stopPropagation ? evs.stopPropagation() : evs.cancelBubble = true; 一个加()一个不加(), 兼容就用带()来判断 */ divs[0].onclick = a; //不是捕获就是冒泡 divs[1].onclick = a; divs[2].onclick = a;阻止默认事件
标签.事件 return false;
绑定:
标准: evs.preventDefault();
ie: evs.returnValue = false;
兼容: evs.preventDefault ? evs.preventDefault() : evs.returnValue = false;
u.bind(document, 'contextmenu', function(ev){ console.log(1); var evs = event || ev; // return false; // evs.preventDefault(); // evs.returnValue = false; evs.preventDefault ? evs.preventDefault() : evs.returnValue = false; });cookie: 是浏览器在访问服务器之后, 服务器传给浏览器的一段数据.浏览器需要保存这段数据, 在每次请求的时候, 都必须带上这段数据, 一般是不会轻易删除。
cookie: 指小量信息, 只能存储4kb, 由web服务器创建, 存储在用户计算机中.
优缺点
优点缺点由web服务器创建, 存储在本地的少量数据存储容量有限, 只有4kb谷歌和欧朋不支持本地存储谷歌和欧朋不支持本地存储没有过期时间, 一般默认浏览结束就销毁cookiecookie每次请求的时候都会自动添加到请求头Request Header, 增加容量存储: document.cookie = ‘key=value’;
注意:一次只能存储一个cookie, 如果key相同, 后面的value会覆盖前面的
document.cookie = 'userName=123456'; document.cookie = 'pass=123456'; document.cookie = 'userName=ujiuye';两种编程模式
面向过程: 注重过程
面向对象: 注重结果
对象的特征: 封装 多态 继承
对象的组成:
属性:静态的, 对象的描述-----变量
方法:动态的, 对象的行为-----函数
1). 函数名首字母大写(不是必须, 为了和普通函数区别, 是约定)
2). 构造函数调用前面必须要有new, 不加和普通函数一样
3). 属性和方法直接加在this上
new的时候会发生的事情: 1). 创建一个空对象
2). 将空对象的__proto__指向构造函数的原型对象的prototype
3). this指向空对象, 添加属性和方法, 隐式返回
原型: proto, 原型是当对象创建的时候就自带的属性, 用来存储最顶层共享的属性和方法
// 1. 构造函数创建 function CreateObj(name, sex) { // var obj1 = new Object(); this.name = name; this.sex = sex; this.tip = function () { console.log('会挣钱'); } // return this; } // 2. 实例化对象 var obj = new CreateObj('彭于晏', '男'); var obj1 = new CreateObj('彭于晏2号', '男'); console.log(obj, obj1); console.log(obj.tip == obj1.tip); // false // 问题: 内存浪费原型
原型对象: prototype: 原生对象身上用来存储共享的属性和方法的对象就是原型对象原型属性: proto, 原型是当对象创建的时候就自带的属性, 用来存储最顶层共享的属性和方法
修改原型对象方法, 共享效果
// 1. 原型对象: prototype: 原生对象身上用来存储共享的属性和方法的对象就是原型对象 console.log(Array.prototype); console.log(Date.prototype); // 2. 原型属性: __proto__, 原型是当对象创建的时候就自带的属性, 用来存储最顶层共享的属性和方法 var arr = new Array(1,2,3); console.log(arr.__proto__); console.log(arr.__proto__ == Array.prototype); // true // 修改原型对象方法, 共享效果 arr.push(1); console.log(arr); Array.prototype.push = function(){ console.log(1); } arr.push(9); console.log(arr); 原型创建对象 // 1. 原型创建 function CreateObj(name, sex) { CreateObj.prototype.name = "彭于晏"; CreateObj.prototype.sex = "男"; CreateObj.prototype.tip = function(){ console.log('挣钱'); } } var obj = new CreateObj('彭昱畅', '男'); var obj1 = new CreateObj('彭昱畅2号', '男'); console.log(obj, obj1); console.log(obj.tip == obj1.tip); // true // 不能传参