jquery代理,jquery代理IP

jquery中的delegate函数有什么用

delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数。

夏县网站建设公司成都创新互联,夏县网站设计制作,有大型网站制作公司丰富经验。已为夏县上千提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的夏县做网站的公司定做!

此外,你还可以额外传递给事件处理函数一些所需的数据。

即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数仍然对其有效。

此外,该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

要删除通过delegate()绑定的事件,请使用undelegate()函数。

从jQuery 1.7开始,请优先使用事件函数on()替代该函数。

该函数属于jQuery对象(实例)。

语法

jQuery 1.4.2 新增该函数。其主要有以下两种形式的用法:

用法一:

jQueryObject.delegate( selector , events [, data ], handler )

用法二:jQuery 1.4.3 新增支持该用法。

jQueryObject.delegate( selector, eventsMap )

参数

参数

描述

selector

String类型一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。如果该参数为null或被省略,则表示当前元素自身绑定事件(实际触发者也可能是后代元素,只要事件流能到达当前元素即可)。

events

String类型一个或多个用空格分隔的事件类型和可选的命名空间,例如"click"、"focus click"、"keydown.myPlugin"。

data

可选/任意类型触发事件时,需要通过event.data传递给事件处理函数的任意数据。

handler

Functidelegate类型指定的事件处理函数。

eventsMap

Object类型一个Object对象,其每个属性对应事件类型和可选的命名空间(参数events),属性值对应绑定的事件处理函数(参数handler)。

关于参数events中可选的命名空间,请参考最下面的示例代码。

关于参数selector,你可以简单地理解为:如果该参数等于null或被省略,则为当前匹配元素绑定事件;否则就是为当前匹配元素的后代元素中符合selector选择器的元素绑定事件。

参数handler中的this指向当前匹配元素的后代元素中触发该事件的DOM元素。如果参数selector等于null或被省略,则this指向当前匹配元素(也就是该元素)。

delegate()还会为handler传入一个参数:表示当前事件的Event对象。

参数handler的返回值与DOM原生事件的处理函数返回值作用一致。例如"submit"(表单提交)事件的事件处理函数返回false,可以阻止表单的提交。

如果事件处理函数handler仅仅只用于返回false值,可以直接将handler设为false。

返回值

delegate()函数的返回值为jQuery类型,返回当前jQuery对象本身。

重要说明:delegate()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后

代元素中符合选择器selector参数的元素绑定事件处理函数。delegate()函数并不是直接为这些后代元素挨个绑定事件,而是"委托"给当前

jQuery对象的匹配元素来处理。由于DOM

2级的事件流机制,当后代元素selector触发事件时,该事件会在事件冒泡中传递给其所有的祖辈元素,当事件流传递到当前匹配元素时,jQuery会

判断是哪个后代元素触发了事件,如果该元素符合选择器selector,jQuery就会捕获该事件,从而执行绑定的事件处理函数。

示例说明

以点击事件("click")为例,以下是jQuery中事件函数的常规用法(某些函数也存在其它形式的用法,此处暂不列出):

// 这里的选择器selector用于指定可以触发事件的元素

// 这里的选择器ancestor应是selector的祖辈元素,selector触发的事件可以被其祖辈元素在事件流中捕获,从而以"代理"的形式触发事件。

// jQuery 1.0+ (1.4.3+支持参数data)

$("selector").click( [ data ,] handler );

// jQuery 1.0+ (1.4.3+支持参数data)

$("selector").bind( "click" [, data ], handler );

// jQuery 1.3+ (1.4+支持参数data)

$("selector").live( "click" [, data ], handler );

// jQuery 1.4.2+

$("ancestor").delegate( "selector", "click" [, data ], handler );

// jQuery 1.7+

$("ancestor").on( "click", "selector" [, data ], handler );

请参考下面这段初始HTML代码:

div id="n1"

p id="n2"spanCodePlayer/span/p

p id="n3"span专注于编程开发技术分享/span/p

em id="n4";/em

/div

p id="n5"Google/p

我们为div中的所有p元素绑定点击事件:

// 为div中的所有p元素绑定click事件处理程序

// 只有n2、n3可以触发该事件

$("div").delegate("p", "click", function(){

// 这里的this指向触发点击事件的p元素(Element)

alert( $(this).text() );

});

运行代码(其他代码请自行复制到演示页面运行)

如果要绑定所有的p元素,你可以编写如下jQuery代码:

//为所有p元素绑定click事件处理程序(body内的所有p元素,就包含所有的p元素)

//n2、n3、n5均可触发该事件

$("body").delegate("p", "click", function(event){

// 这里的this指向触发点击事件的p元素(Element)

alert( $(this).text() );

});

此外,我们还可以同时绑定多个事件,并为事件处理函数传递一些附加的数据,我们可以通过jQuery为事件处理函数传入的参数event(Event事件对象)来进行处理:

var data = { id: 5, name: "李四" };

//为n5绑定mouseenter mouseleave两个事件,并为其传入附加数据data

//附加数据可以是任意类型

$("body").delegate("#n5", "mouseenter mouseleave", data, function(event){

var $me = $(this);

var options = event.data; // 这就是传入的附加数据

if( event.type == "mouseenter"){

$me.html( "你好," + options.name + "!");

}else if(event.type == "mouseleave" ){

$me.html( "再见," + options.name + "!");

}

} );

此外,即使符合条件的元素是delegate()函数执行后新添加,绑定事件对其依然有效。同样以初始HTML代码为例,我们可以编写如下jQuery代码:

//为div中的所有p元素绑定click事件处理程序

//只有n2、n3可以触发该事件

$("div").delegate("p", "click", function(event){

alert( $(this).text() );

});

//后添加的n6也可以触发上述click事件,因为它也是div中的p元素

$("#n1").append('p id="n6"上述绑定的click事件对此元素也生效!/p');

参数events还支持为事件类型附加额外的命名空间。当为同一元素绑定多个相同类型的事件处理函数时。使用命名空间,可以在触发事件、移除事件时限定触发或移除的范围。

function clickHandler(event){

alert( "触发时的命名空间:[" + event.namespace + "]");

}

var $p = $("p");

// A:为所有p元素绑定click事件,定义在foo和bar两个命名空间下

$("body").delegate( "p", "click.foo.bar", clickHandler );

// B:为所有p元素绑定click事件,定义在test命名空间下

$("body").delegate( "p", "click.test", clickHandler );

var $n2 = $("#n2");

// 触发所有click事件

$n2.trigger("click"); // 触发A和B (event.namespace = "")

// 触发定义在foo命名空间下的click事件

$n2.trigger("click.foo"); // 触发A (event.namespace = "foo")

// 触发定义在bar命名空间下的click事件

$n2.trigger("click.bar"); // 触发A (event.namespace = "bar")

// 触发同时定义在foo和bar两个命名空间下的click事件

$n2.trigger("click.foo.bar"); // 触发A (event.namespace = "bar.foo")

// 触发定义在test命名空间下的click事件

$n2.trigger("click.test"); // 触发B (event.namespace = "test")

// 移除所有p元素定义在foo命名空间下的click事件处理函数

$p.undelegate( "click.foo" ); // 移除A

delegate()函数的参数eventsMap是一个对象,可以"属性-值"的方式指定多个"事件类型-处理函数"。对应的示例代码如下:

var events = {

"mouseenter": function(event){

$(this).html( "你好!");

},

"mouseleave": function(event){

$(this).html( "再见!");

}

};

//为n5绑定mouseenter mouseleave两个事件,并为其传入附加数据data

$("body").delegate("#n5", events);

有人说学java只能成码农,那还要学什么呢?

在编程的世界里,Java一直是企业级别开发最喜欢选择的编程语言,从java目前的就业形势来看还是相当不错的,由于手机安卓开发的需要,许多人也开始转战Java的学习,极客营觉得虽然java开发人员的需求量变得越来越大,但这并不代表做java开发人员的技术就可以一成不变,java技术更新的很快,而且在现在中国的培训机构里java学员都是批量生产的,那么竞争压力也是很大的。所以许多人在学好java的基础后,转战到火热的安卓开发。极客营今天来分析一下java各种大致学习路线。\x0d\x0a\x0d\x0a首先总结一下做java最后大致是两个方向:web企业级开发(JavaWeb J2EE)和手机android开发。这两个方向的先决条件是J2SE,J2SE并不是那么简单,只有当你逐渐学的深入了你才体会到java的精髓。\x0d\x0a\x0d\x0a1.HTML+CSS+DIV,前端会用到,作为研发人员至少应该会简单写些页面出来,这是许多编程语言都需要了解的基础。\x0d\x0a\x0d\x0a2.JAVASCRIPT,想要使用一些特殊的效果就需要这个了,但是你并不需要很精通,当你需要用到JS的地方可以用Jquery代理,Jquery很好学,很有用的JS框架,看似复杂华丽的效果他都能轻松完成。\x0d\x0a\x0d\x0a3.Ajax,前端异步交互技术,值得去研究\x0d\x0a\x0d\x0a4.JSP,Servlet,Javabean,发展至今已经不提倡在JSP里嵌入JAVA代码,所以仅仅是作为视图层使用,嵌入些如JSTL和Struts2标签库的标签成为动态页面。Servlet是应该重点学习的,包括如过滤器、监听器等,这些都是当下Struts2或者未来WEB框架的底层基础和原理。\x0d\x0a\x0d\x0a5.Strut2+Hibernate(or JPA)+Spring,当下十分流行的开发框架。其实是很容易上手的,但关键是需要懂得原理。\x0d\x0a\x0d\x0a6.Web Service技术,它能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。

jquery中以下哪些方法可以实现事件代理

H5edu教育Html5为您解答:

1.事件代理的原理和意义

实现原理是利用了浏览器的事件冒泡和事件源(target)。

在js中事件会冒泡到父级节点,所以我们可以在父级节点进行事件代理。例如一个使用jQuery的函数:

$("#tab td").click(function(){

$(this).css("background","red");

}) ;

上面的函数给一个tab的td加了一个单击事件,但是如果表格1000行,就得绑定1000次,

$("#tab").bind("click",function(ev)){

var $obj=$(ev.target);

$obj.css("background","red");

}

以上用bind函数将click绑定到了tab上,从而实现事件代理。

2.jQuery中的绑定函数

(1).bind()为每个匹配元素的特定事件绑定事件处理函数

$("#niu").bind('click',function(){

alert("hello niuniu");

});

此代码把id为niu的元素响应事件click,并显示警报。使用bind绑定多个事件时,可以这样

$("#niu").bind('mouseenter mouseleava',function(){

$(this).css("background","yellow");

});

$("#foo").bind({

click:function(){

},

mouseenter:function(){

}

});

(2).delegate()指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数

$("table").delegate("td","click",function(){

$(this).toggleClass("chosen");

});

(3).on在选择元素上绑定一个或多个事件的事件处理函数

function greet(event) { alert("Hello"+event.data.name); }

$("button").on("click", { name: "Karl" }, greet);

$("button").on("click", { name: "Addy" }, greet);

(4).live给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的

$("a").live("click", function() { return false; })

以上是常用的绑定函数。

技术文档引用:

自从.live()方法处理事件一旦传播到文档的顶部,live事件是不可能停止传播的。同样地,.delegate() 事件将始终传播给其中包含的被委托元素;同时,任何在 DOM 树中,比这些元素低的元素上绑定的相同事件,在 .delegate() 事件被调用的时候,也会被触发。因此,如果要在事件中阻止委托事件被触发,可以调用event.stopPropagation()或者返回false防止委派处理程序冒泡。

简单来说,.bind()是直接绑定在元素上,而.live()和.delegate()则是通过冒泡的方式来绑定到元素上的。.bind()方法只能给当前存在的元素绑定事件,对于事后采用JS方式新生成的元素无效,而live方法可以对后生成的元素也可以绑定相应的事件。


分享文章:jquery代理,jquery代理IP
文章链接:http://azwzsj.com/article/dsijges.html