js事件小记

参考javascript编程全解  javascript高级程序设计

对事件的处理方式称为事件处理程序或事件侦听器 ,对于一个元素或事件,只能设定1个事件处理程序,却可以同时设定多个事件监听器

1)设定为HTML元素的属性

<!DOCTYPE html>
<meta charset="UTF-8" />
<head></head>
<body>
	<a href="http://www.baidu.com" onclick="console.log(‘haha‘);return false;">百度</a>

</body>

上面将事件处理程序设定为html元素的属性,能在元素在载入的时候被设定

2)为了在页面在中使javascript代码与html分离,可以在在javascript中将事件处理程序设定为DOM元素的属性

<a href="http://www.baidu.com" id="btn">百度</a>

	<script type="text/javascript">
		var button = document.getElementById("btn");
		function test() {
			console.log(‘haha‘);
			return false;
		}

		btn.onclick = test;

	</script>

3)上面的两种方式中,对一个事件只能指定一种操作(覆盖),为了实现在一个事件响应多种操作,可以使用addEventListener()方法

addEventListener(1,2,3)

参数1 事件

参数2 处理函数

参数3 true/false 指定是在捕获阶段还是冒泡阶段执行 省略第三个参数默认冒泡阶段执行(false冒泡阶段执行 true捕获阶段执行)

<button id="btn">big button</button>

	<script type="text/javascript">
		var button = document.getElementById("btn");

		button.addEventListener(‘click‘,function(){console.log(‘haha‘);},false);
		button.addEventListener(‘click‘,function(){console.log(‘hello‘)},false);

	</script>

这里为button的click事件注册了两个事件侦听器,并且事件侦听器的触发顺序和注册的顺序相同

还可以将含有handleEvent()方法的对象指定为事件监听器

var button = document.getElementById("btn");

		var listener = {
			message: ‘hello world‘,

			handleEvent:function(e) {
				console.log(this.message);
			}
		};

		button.addEventListener(‘click‘,listener,false);

事件的触发

上面的图是DOM的事件流 其实它是融合了两种事件流 IE的事件冒泡和事件捕获

事件冒泡:事件开始由最具体的元素接收,逐级的向上传递到父节点

事件捕获:由不具体的节点(父节点)接收事件,具体的节点最后接收事件

一个完成的DOM事件流是这样的:在捕获阶段事件由父元素向目标元素传播事件,此时目标元素没有接收到事件,在目标阶段元素接收到事件然后在冒泡阶段事件逐级的向上传递

<body id=‘haha‘>
	<button id="btn">big button</button>
	<script type="text/javascript">
		var btn = document.getElementById(‘btn‘);

		btn.onclick = function(event) {
			console.log(event.eventPhase);
		};//2 目标阶段

		document.body.addEventListener(‘click‘,function(event){console.log(event.eventPhase,event.target.id,event.currentTarget.id);},true);         //1 btn haha  捕获阶段  event.target指向实际发生事件的目标 event.currentTarget指向实际处理事件的目标

		document.body.onclick = function(event) {console.log(event.eventPhase)}; // 3 冒泡阶段

	</script>
</body>

上面的例子详细的说明的DOM事件流的执行过程(event的eventPhase属性能显示出事件处于事件流的哪个阶段 1代表捕获阶段2目标阶段 3 冒泡阶段) 先是捕获阶段处理 显示1 btn haha 接着是目标阶段处理 显示2 接着是冒泡阶段 显示3

<body id=‘haha‘>
	<button id="btn">big button</button>
	<script type="text/javascript">
		var btn = document.getElementById(‘btn‘);

		btn.onclick = function(event) {
			console.log(event.eventPhase);
			event.stopPropagation();
		};

		document.body.addEventListener(‘click‘,function(event){console.log(event.eventPhase,event.target.id,event.currentTarget.id);},true);

		document.body.onclick = function(event) {console.log(event.eventPhase)};

	</script>

我在上面相同的代码中在目标阶段的处理函数中加了句event.stopPropagation() 它能立即停止事件在DOM中的传播,取消进一步的捕获或者冒泡

上面的输出是 1 btn hah 2 应为它阻止了事件在冒泡阶段的传播,所以在冒泡阶段的处理函数没有执行

在DOM level3中还引入了另一个方法 stopImmediatePropagation()

它还能阻止当前侦听器的其他侦听器的执行

<body id=‘haha‘>
	<button id="btn">big button</button>
	<script type="text/javascript">
		var btn = document.getElementById(‘btn‘);

		function hello(event) {
			console.log(‘hello‘);
			event.stopImmediatePropagation();

		}
		function world(event) {
			console.log(‘world‘);
		}

		document.body.onclick = function() {
			console.log(‘body‘);
		}

		btn.addEventListener(‘click‘,hello,false);
		btn.addEventListener(‘click‘,world,false);

	</script>

在上面的例子中你将两个事件侦听器的注册顺序改变会发现输出不同的结果,上面的例子中只输出了hello 并且在冒泡阶段body上的处理函数也没有执行

合理的利用冒泡,可以实现事件委托  如下

<body>
    <ul id="container">
        <li>a</li>
        <li>b</li>
        <li>c</li>
        <li>d</li>
        <li>e</li>
    </ul>
</body>

这样的页面结构中我们想单击li时获得li的内容,如果为每一个li都绑定事件侦听器的话,会增加对内存的占用,这时候我们就可以利用冒泡,来实现我们的功能

<ul id="container">
        <li>a</li>
        <li>b</li>
        <li>c</li>
        <li>d</li>
        <li>e</li>
    </ul>

    <script type="text/javascript">
        var lis = document.getElementById(‘container‘);
        lis.onclick = function(event) {
            console.log(event.target.innerHTML);
        };
    </script>
时间: 2024-10-16 22:46:10

js事件小记的相关文章

js事件冒泡和事件委托

js所谓的事件冒泡就是子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 html: 1 <ul class="clearfix" data-type="cityPick"> 2 <li class="active_sort_opts" data-id="0">全部</li> 3 <li data-id="88">纽约</li> 4 <

特殊js事件

1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQUERY表单ajax提交事件 1):添加js插件 2):添加js事件 function submitForm(){ $.ajax({ url:'${root}/doLogin', data:$('form').serialize(), dataType:'json', cache:false, ty

JS事件(事件冒泡和事件捕获)

事件流:描述的是在页面中接收事件的顺序 事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档) 事件捕获:最不具体的节点先接收事件,而最具体的节点应该是最后接收事件 DOM中:用于处理指定和删除事件处理程序的操作addEventListener()和removeEventListener().他们都接收三个参数:要处理的事件名.作为事件处理程序的函数和布尔值(事件处理的时候)[true:事件捕获时;false:事件冒泡时] DOM中的事件对象: type属性 用于获取事件类

略谈js事件

 本人是这样从做学的js事件分成以下三个方面: 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup. 在这3种事件类型中,keydown和keyup比较底层,而keypress比较高级.这里所谓的高级是指,当用户按下shift +

js事件的三个阶段

js事件的三个阶段分别为:捕获.目标.冒泡 1.捕获:事件由页面元素接收,逐级向下,到具体的元素 2.目标:具体的元素本身 3.冒泡:跟捕获相反,具体元素本身,逐级向上,到页面元素 IE5.5:div---body---document IE6.0:   div---body---html---document Mozilla:div---body---html---document---window 事件捕获:当使用事件捕获时,父级元素先触发,子元素后触发 事件冒泡:当使用事件冒泡时,子级元素

JS中的函数、Bom、DOM及JS事件

本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的声明及调用] 1.函数声明的格式: function 函数名(参数1,参数2,参数3,--){//函数体 return 结果; } >>>函数的调用格式: 直接调用:函数调用的格式:函数名(参数一的值,参数二的值,--): 事件调用:事件名=函数名( ); 2.函数声明的几点强调: ①函数名

js事件对象坐标

js事件对象坐标---贴上代码 <body style="position:relative;width:100%;height:100%;padding:15px;margin:20px;"> <div style="position:absolute;top:100px;left:100px;width:500px;height:500px;padding:5px;margin:9px;background:#ddd;" onclick=&qu

JS的Touch事件们,触屏时的js事件

丫的,终于找到了JS在平板电脑上的事件!!! iphone.ipod Touch.ipad触屏时的js事件 1.Touch事件简介 pc上的web页面鼠标会产生onmousedown.onmouseup.onmouseout.onmouseover.onmousemove的事件,但是在移动终端如iphone.ipod Touch.ipad上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel事件,分别对应了触屏开始.拖拽及完成

Js事件大全

一般事件 事件 浏览器支持 描述  onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击  onDblClick IE4|N4|O 鼠标双击事件  onMouseDown IE4|N4|O 鼠标上的按钮被按下了  onMouseUp IE4|N4|O 鼠标按下后,松开时激发的事件  onMouseOver IE3|N2|O3 当鼠标移动到某对象范围的上方时触发的事件  onMouseMove IE4|N4|O 鼠标移动时触发的事件  onMouseOut IE4