delegate事件(jquery中的delegate函数有什么用)
本文目录
- jquery中的delegate函数有什么用
- jQuery事件绑定方法bind,live,delegate和on的区别
- .C#中的委托是什么事件是不是一种委托
- C#中的委托事件什么意思
- C#自定义事件用在什么地方
- jQuery 的delegate 怎么绑定多个事件
- C#中的委托是什么委托与事件有什么关系
jquery中的delegate函数有什么用
delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数。
此外,你还可以额外传递给事件处理函数一些所需的数据。
即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数仍然对其有效。
此外,该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。
要删除通过delegate()绑定的事件,请使用undelegate()函数。
从jQuery ***开始,请优先使用事件函数on()替代该函数。
该函数属于jQuery对象(实例)。
语法
jQuery ***** 新增该函数。其主要有以下两种形式的用法:
用法一:
*****( selector , events , handler )
用法二:jQuery ***** 新增支持该用法。
*****( selector, eventsMap )
参数
参数
描述
selector
String类型一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。如果该参数为null或被省略,则表示当前元素自身绑定事件(实际触发者也可能是后代元素,只要事件流能到达当前元素即可)。
events
String类型一个或多个用空格分隔的事件类型和可选的命名空间,例如"click"、"focus click"、"*****"。
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 ***+ (*****+支持参数data)
$("selector").click( handler );
// jQuery ***+ (*****+支持参数data)
$("selector").bind( "click" , handler );
// jQuery ***+ (***+支持参数data)
$("selector").live( "click" , handler );
// jQuery *****+
$("ancestor").delegate( "selector", "click" , handler );
// jQuery ***+
$("ancestor").on( "click", "selector" , handler );
请参考下面这段初始HTML代码:
《div id="n1"》
《p id="n2"》《span》CodePlayer《/span》《/p》
《p id="n3"》《span》专注于编程开发技术分享《/span》《/p》
***隐藏网址***
《/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 opti*** = *****; // 这就是传入的附加数据
if( ***** == "mouseenter"){
$*****( "你好," + opti***.name + "!");
}else if(***** == "mouseleave" ){
$*****( "再见," + opti***.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( "触发时的命名空间:");
}
var $p = $("p");
// A:为所有p元素绑定click事件,定义在foo和bar两个命名空间下
$("body").delegate( "p", "*****", clickHandler );
// B:为所有p元素绑定click事件,定义在test命名空间下
$("body").delegate( "p", "*****", clickHandler );
var $n2 = $("#n2");
// 触发所有click事件
$*****("click"); // 触发A和B (***** = "")
// 触发定义在foo命名空间下的click事件
$*****("*****"); // 触发A (***** = "foo")
// 触发定义在bar命名空间下的click事件
$*****("*****"); // 触发A (***** = "bar")
// 触发同时定义在foo和bar两个命名空间下的click事件
$*****("*****"); // 触发A (***** = "*****")
// 触发定义在test命名空间下的click事件
$*****("*****"); // 触发B (***** = "test")
// 移除所有p元素定义在foo命名空间下的click事件处理函数
$*****( "*****" ); // 移除A
delegate()函数的参数eventsMap是一个对象,可以"属性-值"的方式指定多个"事件类型-处理函数"。对应的示例代码如下:
var events = {
"mouseenter": function(event){
$(this).html( "你好!");
},
"mouseleave": function(event){
$(this).html( "再见!");
}
};
//为n5绑定mouseenter mouseleave两个事件,并为其传入附加数据data
$("body").delegate("#n5", events);
jQuery事件绑定方法bind,live,delegate和on的区别
bind是用来绑定一个或多个事件的,live其实bind的一个加强版,用来绑定通过JavaScript或者jQuery添加的DOM元素事件,其语法结构是一样
$("p").bind("mouseenter mouseleave",function(){
alert("ok");
})
$("p").live("mouseenter mouseleave",function(){
alert("ok");
})
delegate用于事件委托,也是绑定过JavaScript或者jQuery添加的DOM元素事件。
$("div").delegate("p","click",function(){
alert("p");
})
点击div下面的P执行alert;
而on是在***之后新增的,是把bind,live,delegate全部合并在一起了,
$("div").on("click","p",function(){
alert(1);
})
不需要事件委托的时候把P去掉就会变成点击div触发了。
个人建议根据版本来使用,语法其实都差不多,如果你是用***版本以上就建议用on,毕竟bind,live,delegate这些将来都会遗弃了,如有错误,请指出。顺便吐槽一下楼上的回答,不走心啊
.C#中的委托是什么事件是不是一种委托
一、委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。事件也是一种委托。
二、案例://声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void NewDelegate();
//下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
NewDelegate dgt1=new NewDelegate(a);
NewDelegate dgt2=new NewDelegate(b);
//dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
//相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托。
拓展资料:
C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders
Hejl**erg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司
.NET windows网络框架的主角。
Net Framework的编码规范:
委托类型的名称都应该以EventHandler结束。
委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
事件的命名为 委托去掉 EventHandler之后剩余的部分。 继承自EventArgs的类型应该以EventArgs结尾。
C#中的委托事件什么意思
这个是n多面试笔试里面爱出的一道题,老生常谈。。。
我讨厌复制粘贴,直接告诉你我的理解,希望对你有帮助---
委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
给你举个例子:
//声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void NewDelegate();
//下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
NewDelegate dgt1=new NewDelegate(a);
NewDelegate dgt2=new NewDelegate(b);
//dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
//相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托
}
事件是一种特殊的委托,为什么这么说呢?
用反编译工具反编译.net framework即可发现,事件的定义(这里只是举其中一种事件的定义,事件的参数在类库中定义有区别),如下:
public delegate void EventHandler(object sender, EventArgs e);
而常见的各种控件的Click事件是如何定义的呢?
public event EventHandler Click;
说明 Click事件是一个委托
而我们常见的一个Button控件添加一个事件是怎么做的呢?
PageLoad里:*****+=new EventHandler(Button1_Click);
定义Button1的事件 protected Button1_Click(object sender,EventArgs e){}
如你所见,这是一个很典型的委托调用。
C#自定义事件用在什么地方
通常C#自定义事件有下面的几个步骤:
1、声明一个delegate: (用于事件的类型的定义)
如:
C#代码
public delegate void 事件名称EventHandler(object serder, EventArgs e);
public delegate void 事件名称EventHandler(object serder, EventArgs e);
//事件名称用你的自己的来代替,随后的EventHandler是C#的建议命名规范,当然如果你不想遵守,可以使用任何字符甚至可以不要。
如果你想自定义事件的参数EventArgs,你可以从这个类派生你自己的事件参数类,然后在delegate的声明中,用你的参数类替换EventArgs
注:要全面了解自定义事件的原理,你需要学习有关delegate的知识。
2、在你的类中声明一个事件,并且使用步骤1的delegate作为事件的类型
C#代码
public event 事件名称EventHandler 事件名称;
public event 事件名称EventHandler 事件名称;
3、在你的类中需要触发事件的方法中,添加事件触发代码:
C#代码
事件名称(this, new EventArgs());
事件名称(this, new EventArgs());
或者:
C#代码
if(事件名称!=null)
事件名称(this, new EventArgs());
if(事件名称!=null)
事件名称(this, new EventArgs());
//如果使用你自己的事件参数类,你可以用你的参数类事例替换new EventArgs(), 同时在你的参数类中保存你需要传递的数据。
4、C#自定义事件注册:
事件注册和普通的事件注册没有不同,也就是说如果一个外部的对象在你的事件被触发的时候需要作出响应,那么你可以在外部了构造器中(或者适当的地方)对事件进行注册
C#代码
带有事件的类实例.事件名称+= new 事件名称EventHandler( 事件处理方法名称);
带有事件的类实例.事件名称+= new 事件名称EventHandler( 事件处理方法名称);
5、编写事件处理方法:
C#代码
public void 事件处理方法名称(object sender, EventArgs e)
{
//添加你的代码
}
public void 事件处理方法名称(object sender, EventArgs e)
{
//添加你的代码
}
注:如果你在类中处理自己的触发事件,你可以选择C#自定义事件步骤4和5的方式,也就是注册自己,也可以在触发事件代码中直接调用事件处理方法。
jQuery 的delegate 怎么绑定多个事件
$("table").delegate("td","click mouseover mouseout mousedown", function(){ });
空格隔开即可。
C#中的委托是什么委托与事件有什么关系
委托是一个类型,就像类一样,而事件是一个实例(委托的实例中的一种)
希望回答对你有帮助
更多文章:
怎么判断是否有sql注入漏洞(如何判断是否存在**L注入以及注入类型)
2026年4月25日 06:00
intellij idea配置tomcat(App 开发者应该知道的 cookie 和 session)
2026年4月25日 05:40
html接收表单数据(html表单组件能否接受数据,以便接下来来修改数据,点击保存后,重新提交给数据库)
2026年4月25日 05:00
在线txt文本编辑器(mac最好用的文本编辑器求推荐中文版!)
2026年4月25日 04:40
delegate事件(jquery中的delegate函数有什么用)
2026年4月25日 04:20
switch case语句例子大小范围(用switch怎么判断一个变量值的范围)
2026年4月25日 04:00
实例方法第一个形参的命名(什么是形参,实参什么时候形参的数可以传到实参中说个例子)
2026年4月25日 03:40
轮播图代码html5(淘宝上怎样用html代码实现图片轮播!)
2026年4月25日 03:20
unsigned char是什么意思(unsigned char 和 signed char 区别)
2026年4月25日 03:00



