jQuery Direct and delegated events 直接事件与委托事件

ref: http://api.jquery.com/on/

直接事件: 将事件委托直接绑定到dom元素上,当事件发生时触发handler.

委托事件:  将事件委托绑定到dom元素的外层容器上,当事件发生时,冒泡到匹配的外层元素,触发相应handler.

  采用委托事件的优势有2点: 1.效率高。对子元素数量非常多时,只需要绑定一个handler到父容器。 2. 可以对事件绑定调用时,尚未生成的子元素,仍然有效(只需要保证父容器已存在)。

jquery 使用on方法实现事件绑定。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Test jquery on method</title>
	<style>
	div{ border:solid 1px red; margin: 10px; padding: 10px;}
	</style>
	<script src="../JsCss/jquery-1.12.4.min.js"></script>
	<script>
	/*
		ref: http://api.jquery.com/on/
		jquery on 方法原型: .on( events [, selector ] [, data ], handler )
	*/
	$(function () {
		// delegate event 委托事件
		$("#btnAdd").click(function () {
			$("#container").append("<div class=‘sub-container‘><b>"+new Date().getTime()+"</b></div>");
		});
		$("#container").on(‘click‘, ‘.sub-container‘, function(e){
			alert($(this).html());
		});
		// direct event 直接事件
		$("#btnAdd2").click(function () {
			$("#container2").append("<div class=‘sub-container‘><b>"+new Date().getTime()+"</b></div>");
		});
		// If selector is omitted or is null, the event handler is referred to as direct or directly-bound.
		$("#container2 .sub-container").on(‘click‘, function(e){
			alert($(this).html());
		});
	});
	</script>
</head>
<body>
	<button id="btnAdd">Add div</button>
	<div id="container">
		<div>无事件触发</div>
		<div class=‘sub-container‘>xxx</div>
	</div>

	<button id="btnAdd2">Add div</button>
	<div id="container2">
		<div>无事件触发</div>
		<div class=‘sub-container‘>xxx</div>
	</div>
</body>
</html>

  

时间: 2024-10-16 09:53:07

jQuery Direct and delegated events 直接事件与委托事件的相关文章

jQuery学习-事件之绑定事件(二)

在上一篇<jQuery学习-事件之绑定事件(一)>我们了解了jQuery的add方法,今天我们来学习下dispatch方法: dispatch: function( event ) { //这里是修正event对象的属性,处理兼容性问题         event = jQuery.event.fix( event ); var i, ret, handleObj, matched, j,             handlerQueue = [],//事件队列             arg

jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)

1.jQuery鼠标事件之click与dbclick事件 方法一:$ele.click()(不带参数) <div id="test">点击触发<div> $("ele").click(function(){ alert('触发指定事件') }) $("#test").click(function(){ $("ele").click() //手动指定触发事件 });   方法二:$ele.click( h

jQuery学习-事件之绑定事件(一)

我们都知道jQuery的事件其思想来源于Dean Edwards的addEvent,通过源码我们知道jQuery在为元素绑定事件时,每种类型的事件(click,blur)时只绑定了一次对应类型的事件处理方法,实际的方法是存在jQuery的缓存系统中的,这样做的好处我就不多说了,绑定方法的函数为add方法,在执行事件的时,通过handers在缓存系统中获取事件列表,然后通过dispatch函数来执行对应的事件. jQuery.event = { add: function( elem, types

jQuery基础(4)- 位置信息、事件流、事件对象、事件代理、jquery事件

一.jQuery的位置信息 jQuery的位置信是JS的client系列.offset系列.scroll系列封装好的一些简便api. 1.宽度和高度 a.获取宽度和高度,例如: .width() // 获取匹配元素集合中的第一个元素的宽度值,内容宽度,不含padding .height() // 获取匹配元素集合中的第一个元素的高度值,内容高度,不含padding 注意:这个方法不接受任何参数..css(‘width’)(或.css(‘height’))和 .width()(或.height()

jquery 选择器、筛选器、事件绑定与事件委派

一.jQuery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdocuments.events.实现动画效果,并且方便地为网站提供AJAX交互. jQuery的引入 <script src='jquery 3.3.1.js'></script>//引入jQuery代码(模块) <script type="text/javascript"> //写自己的js或者jquery代码 </script>

jQuery事件之鼠标事件

鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的.   (1):click事件:click事件于用户在元素敲击鼠标左键,并在相同元素上松开左键时触发.        $('p').click(function(){                alert('click function is running !');              });    (2):dbclick事件:dbclick事件在用户完成迅速连续的两次点击之后触发,双击的速度取决于操作系统的设置.一般双击事件

jQuery学习-事件之绑定事件(三)

在上一篇<jQuery学习-事件之绑定事件(二)>我们了解了jQuery的dispatch方法,今天我们来学习下handlers 方法: handlers: function( event, handlers ) {         var sel, handleObj, matches, i,             handlerQueue = [],             delegateCount = handlers.delegateCount,             cur =

jQuery事件篇---高级事件

内容提纲: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one 发文不易,转载请注明出处! 一.模拟操作 在事件触发的时候,有时我们需要一些模拟用户行为的操作.例如:当网页加载完毕后自行点击一个按钮触发一个事件,而不是用户去点击. //点击按钮事件 $('input').click(function () { alert('我的第一次点击来自模拟!'); }); //模拟用户点击行为 $('input').trigger('click'); //可以合并两个方法 $('inp

jquery事件与绑定事件

1.首先,我们来看一下经常使用的添加事件的方式: <input type="button" id="btn" value="click me!" onclick="shao();" /> <script type="text/javascript"> function shao() { alert("msg is showing!"); } </script