事件的处理

事件

  • 事件介绍
  • 内联模型
  • 脚本模型
  • 事件处理函数

JavaScript事件是由访问Web页面的用户引起的一系列操作,例如:用户点击。当用户执行某些操作的时候,再去执行一系列代码。

一.事件介绍

事件一般是用于浏览器和用户操作进行交互。最早是IE和Netscape Navigator中出现,作为分担服务器端运算负载的一种手段。直到几乎所有的浏览器都支持事件处理。而DOM2级规范开始尝试以一种复合逻辑的方式标准化DOM事件。IE9、Firefox、Opera、Safari和Chrome全都已经实现了“DOM2级事件”模块的核心部分。IE8之前浏览器仍然使用其专有事件模型。

JavaScript有三种事件模型:内联模型、脚本模型和DOM2模型。

这种模型是最传统接单的一种处理事件的方法。在内联模型中,事件处理函数是HTML标签的一个属性,用于处理指定事件。虽然内联在早期使用较多,但它是和HTML混写的,并没有与HTML分离。

内联模型

在HTML中把事件处理函数作为属性执行JS代码
<input type="button" value="按钮" onclick="alert('Lee');"  />	//注意单双引号

//在HTML中把事件处理函数作为属性执行JS函数
<input type="button" value="按钮" onclick="box();"  />	//执行JS的函数
PS:函数不得放到window.onload里面,这样就看不见了。

脚本模型

由于内联模型违反了HTML与JavaScript代码层次分离的原则。为了解决这个问题,我们可以在JavaScript中处理事件。这种处理方式就是脚本模型。

var input = document.getElementsByTagName('input')[0];		//得到input对象
input.onclick = function () {						//匿名函数执行
		alert('Lee');
	};

通过匿名函数,可以直接触发对应的代码。也可以通过指定的函数名赋值的方式来执行函数(赋值的函数名不要跟着括号)。

input.onclick = box;

事件处理函数

JavaScript可以处理的事件类型为:鼠标事件、键盘事件、HTML事件。

事件处理函数影响的元素何时发生
onabort视频和音频当图像加载被中断时
onblur窗口、框架、所有表单对象当焦点从对象上移开时
onchange输入框,选择框和文本区域当改变一个元素的值且失去焦点时
onclick链接、按钮、表单对象、图像映射区域当用户单击对象时
ondblclick链接、按钮、表单对象当用户双击对象时
ondragdrop窗口当用户将一个对象拖放到浏览器窗口时
onError脚本当脚本中发生语法错误时
onfocus窗口、框架、所有表单对象当单击鼠标或者将鼠标移动聚焦到窗口或框架时
onkeydown文档、图像、链接、表单当按键被按下时
onkeypress文档、图像、链接、表单当按键被按下然后松开时
onkeyup文档、图像、链接、表单当按键被松开时
onload主题、框架集、图像 文档或图像加载后
onunload主体、框架集 文档或框架集卸载后
onmouseout链接当图标移除链接时
onmouseover链接当鼠标移到链接时
onmove窗口当浏览器窗口移动时
onreset表单复位按钮单击表单的reset按钮reset按钮
onresize窗口当选择一个表单对象时
onselect表单元素当选择一个表单对象时
onsubmit表单当发送表格到服务器时
1.鼠标事件,页面所有元素都可触发

click:当用户单击鼠标按钮。

input.onclick = function () {
		alert('click');
	};

dblclick:当用户双击主鼠标按钮时触发。

input.ondblclick = function () {
		alert('dblclick');
	};

mousedown:当用户按下了鼠标还未弹起时触发。

	input.onmousedown = function () {
		alert('mousedown');
	};

mouseup:当用户释放鼠标按钮时触发。

	input.onmouseup = function () {
		alert('mouseup');
	};

mousemove:当鼠标指针在元素上移动时触发。

<div id="onmousemove" style="background-color: aqua;width: 500px;height: 500px;display: block">
    onmousemove
</div>
<script>
    function foo() {
        console.log("我一直在移动");
    }
    document.getElementById("onmousemove").onmousemove = foo;
</script>

一般来说,onmouseover、onmouseout一起使用,鼠标经过时自身触发事件,经过其子元素时也触发该事件,每经过一次子元素都触发该事件,属于不断触发;onmouseenter、onmouseleave:鼠标经过时自身或者其子元素都触发事件,但是只触发一次。

<div id="first_layer" style="background-color: aqua;width: 500px;height: 500px">
    第一层
    <div id="second_layer" style="background-color: violet;width: 300px;height: 300px">
        第二层
        <div id="third_layer" style="background-color: yellow;width: 100px;height: 100px">
            第三层
        </div>
    </div>
<script>
    var onmouseover = document.getElementById("first_layer");
    onmouseover.onmouseenter = function () {
        console.log("onmouseenter");
    }
    onmouseover.onmouseleave = function () {
        console.log("onmouseleave");
    }
</script>
键盘事件

keydown:当用户按下键盘上任意键触发,如果按住不放,会重复触发。

document.onkeydown = function (e) {
		alert('Lee');
	};

keypress:当用户按下键盘上的字符键触发,如果按住不放,会重复触发。

document.onkeypress = function () {
		alert('Lee');
	};

keyup:当用户释放键盘上的键触发。

document.onkeyup = function () {
		alert('Lee');
	};

https://www.cnblogs.com/wuhua1/p/6686237.html

HTML事件

select:当用户选择文本框(input或textarea)中的一个或多个字符触发。

input.onselect = function () {
		alert('Lee');
	};

change:当文本框(input或textarea)内容改变且失去焦点后触发。

input.onchange = function () {
		alert('Lee');
	};

focus:当页面或者元素获得焦点时在window及相关元素上面触发。

input.onfocus = function () {
		alert('Lee');
	};

blur:当页面或元素失去焦点时在window及相关元素上触发。

input.onblur = function () {
		alert('Lee');
	};

submit:当用户点击提交按钮在元素上触发。

form.onsubmit = function () {
		alert('Lee');
	};

reset:当用户点击重置按钮在元素上触发。

form.onreset= function () {
		alert('Lee');
	};

resize:当窗口或框架的大小变化时在window或框架上触发。

window.onresize = function () {
		alert('Lee');
	};

scroll:当用户滚动带滚动条的元素时触发。

window.onscroll = function () {
		alert('Lee');
	};

事件绑定及深入

  • 传统事件绑定的问题
  • W3C事件处理函数
  • IE事件处理函数
  • 事件对象的其他补充

传统事件绑定的问题

问题一:一个事件处理函数触发两次事件

window.onload = function () {	//第一组程序项目或第一个JS文件
	alert('Lee');
};
window.onload = function () {	/第二组程序项目或第二个JS文件
	alert('Mr.Lee');
};

当两组程序或两个JS文件同时执行的时候,后面一个会把前面一个完全覆盖掉。导致前面的window.onload完全失效了。

事件流

页面中元素接受事件的顺序

谷歌IE--------事件冒泡流

事件由最开始的元素接收,然后逐级向上传播到最不具体的那个节点(文档)

你在地方法院要上诉一件案子,如果地方没有处理此类案件的法院,地方相关部门会帮你继续往上级法院上诉,比如从市级到省级,直至到中央法院,最终使你的案件得以处理。

网景--------事件捕获流

事件由最最不具体的那个节点(文档)元素接收,然后逐级向下广播到最具体的那个元素

W3C事件处理函数

“DOM2级事件”定义了两个方法,用于添加事件和删除事件处理程序的操作:addEventListener()和removeEventListener()。所有DOM节点中都包含这两个方法,并且它们都接受3个参数;事件名、函数、冒泡或捕获的布尔值(true表示捕获,false表示冒泡)。

window.addEventListener('load', function () {
	alert('Lee');
}, false);

window.addEventListener('load', function () {
	alert('Mr.Lee');
}, false);

阻止事件的默认行为—阻止冒泡

e.stopPropagation(),

写法

xxx.addEventListener("click",function (e) {
            alert("child");
            e.stopPropagation()
        },false)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值