首页 > 办公教程 > 正文

js 事件委托,js如何接收事件委托中得到的变量

2020-04-30 09:43:57  来源:http://www.yummyboobs.net  编辑:admin

原生js怎么注册委托事件

好的废话不多说 我直接给出一份演示现在我要对id为demo的节点的后代的拥有class test的节点进行监听<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>#demo.test{width:10px;height:10px;background-color:#00AEEF;margin:5px;}</style></head><body><divid="demo"></div><script>//获取所有的父节点functiongetParentNode(Obj,Arr){if(!Arr){varArr=[];}Arr.push(Obj);if(Obj&&Obj.parentNode){getParentNode(Obj.parentNode,Arr);}returnArr;};//判断是否拥有classfunctionhasClass(e,v){if(!e.getAttribute)returnfalse;if(e.getAttribute("class")==null)returnfalse;varallClass=e.getAttribute("class").split("");if(allClass.indexOf(v)!=-1){returntrue}else{returnfalse}}//事件委托现在我要对id为demo的节点的后代的拥有classtest的节点进行监听//添加事件document.getElementById("demo").addEventListener("click",function(e){e=e||(typeofwindow.event=="undefined"?event:window.event);//这里对事件对象e799bee5baa6e997aee7ad9431333365633933进行了一个兼容vartarget=typeofe.srcElement=="undefined"?e.target:e.srcElement;varpath=getParentNode(target);for(vari=0;i<path.length;i++){if(hasClass(path[i],"test")){clickTest.call(path[i],e);}}functionclickTest(e){console.log("你点了这个节点");console.log(e);console.log(this);}});document.getElementById("demo").innerHTML="<divclass='test'><span>"+"asdasd</span></div>"</script></body></html>可以看到当我执行domObj.innerHTML=xxx时我是没有对class为test进行添加事件的 但是我点击它执行的函数就是clickTest具体原理自己看代码吧 我就不详细说了

C#中委托与事件有什么区别?

委托本质上是一种“方法接口”,它相当于C/C++中的函数指针,当然它比函数指针安全,在C#中通常用于百事件处理。与JAVA相比,可以避免使用大度量小粒度的匿名类。(不过,也许微软就是使用类似于JAVA的匿名类实现委托的,只不过从字面上看起不是那么回事罢了,谁知道呢?) 事件不是委托,不过由于事件的性质决内定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托(一种“方法接口”)容。实际上,如果你处理自定义的事件,就像JAVA中那样用接口实现也是可以的,不过这么做在C#一般没有什么特别的好处。

用C++进行事件处理,怎么实现C#的委托delegate

delegate简单的说,就是有类型百的函数指针。 与c++或者c的函数指针相比,他的返回类型、度参数列表是在定义中 规定的,实例必须遵守。 对于代理的使用者专来说,无需知道代理的实现者,只要知道代理就可属以了。

.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即可发现,事件的定义(这里只是举其中一种事件的定义,事件的参数在类库中定义有区e79fa5e9819331333264653963别),如下:public delegate void EventHandler(object sender, EventArgs e);而常见的各种控件的Click事件是如何定义的呢?public event EventHandler Click;说明 Click事件是一个委托而我们常见的一个Button控件添加一个事件是怎么做的呢?PageLoad里:Button1.Click+=new EventHandler(Button1_Click);定义Button1的事件 protected Button1_Click(object sender,EventArgs e){}如你所见,这是一个很典型的委托调用。

总是不太理解,VB之中,委托和事件和函数作用有什么区别,在用委托和事件的地方直接调用函数不一样达到

函数,是要你写代码显式调用的,没调用就不运行。事件,是系统指定的动作时自动调用的。委托是转换到指定事件的动作