Heim > Web-Frontend > js-Tutorial > Eine kurze Diskussion über die Ereignisbindungsmethoden bind(), live(), Delegate() und on() in Jquery

Eine kurze Diskussion über die Ereignisbindungsmethoden bind(), live(), Delegate() und on() in Jquery

巴扎黑
Freigeben: 2017-06-25 10:52:49
Original
1204 Leute haben es durchsucht

Vorwort

Da jquery häufig zum Hinzufügen und Löschen von Dom-Elementen in Projekten verwendet wird, umfasst es die Bindungsereignismethode von Dom-Elementen. Fassen wir kurz die Unterschiede zwischen Bind, Live, Delegate usw. zusammen. , zum späteren Nachschlagen, und ich hoffe, dass dieser Artikel den Gärtnern in Zukunft helfen kann. Ich hoffe, dass Sie mich ohne weiteres korrigieren.

bind()

Kurze Beschreibung

  bind()Fügt dem passenden Element einen oder mehrere Ereignishandler hinzu.

Anwendung

 $(selector).bind(event,data,function)

Ereignis: erforderlich; ein oder mehrere Ereignisse, die dem Element hinzugefügt wurden, wie z. B. Klick, Doppelklick usw.; 🎜> Einzelereignisverarbeitung: Zum Beispiel

$(selector).bind("click",data,function); Verarbeitung mehrerer Ereignisse: 1. Verwenden Sie Leerzeichen, um mehrere Ereignisse zu trennen, z. B.

$(selector).bind("click dbclick mouseout",data,function);

2. Verwenden Sie geschweifte Klammern, um mehrere Ereignisse flexibel zu definieren, z. B. $(selector ).bind({event1:function , event2:function, ...})                                                                                                                                               Aufruf der gleichen Funktion

Klammeralternative: Die Bindung ist flexibler und Sie können Funktionen separat an Ereignisse binden.

Daten: optional; Parameter, die übergeben werden müssen;

Funktion: erforderlich; wenn gebunden Die Funktion, die ausgeführt werden muss, wenn ein bestimmtes Ereignis auftritt

Beispiele

Code anzeigen

Anwendbare JQuery-Version

 Gilt für alle Versionen, aber laut offizieller Website gibt es seit Version jquery1.7 die Funktion bind() Es wird empfohlen, stattdessen on() zu verwenden.

live()

Kurze Beschreibung

 live() An das aktuelle oder zukünftige passende Element Einen oder mehrere Event-Handler hinzufügen;

Verwendung

 $(selector).live(event,data,function)

Ereignis: Erforderlich; ein oder mehrere Elemente, die den Elementereignissen hinzugefügt wurden, z als Klick, Doppelklick usw.;

  Einzelereignisverarbeitung: wie $(selector).live ("click",data,function);

Multi-Event-Verarbeitung: 1. Verwenden Sie Leerzeichen, um Trennen Sie mehrere Ereignisse. Ereignisse, z. B. $(selector).live("click dbclick mouseout",data,function);

2. Verwenden Sie geschweifte Klammern, um mehrere Ereignisse flexibel zu definieren, z. B. $(selector). live({event1:function, event2:function, ...}) 

3. Raumtrennungsmethode: Die Bindung ist relativ starr und kann Funktionen nicht separat an Ereignisse binden. Sie eignet sich für die Verarbeitung mehrerer Ereignisse, die dieselbe Funktion aufrufen.

    Klammeralternative: Die Bindung ist flexibler und Sie können Funktionen einzeln an Ereignisse binden;   

Daten: optional; Parameter, die übergeben werden müssen;

  function:必需;当绑定事件发生时,需要执行的函数;

举例说明


 1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3     <title>jquery中live()绑定事件方式</title> 4     <style type="text/css"> 5         .container 6         { 7             width: 300px; 8             height: 300px; 9             border: 1px #ccc solid;10             background-color: Green;11         }12         .btn-test13         {14             border: 1px #ccc solid;15             padding: 5px 15px;16             cursor: pointer;17         }18     </style>19     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>20     <script type="text/javascript">21         $(function () {22 23             /*********添加单个事件处理*********/24 25             $(".btn-test").live("click", function () {26                 //显示隐藏p27                 $(".container").slideToggle();28             });29 30             31             /********添加多个事件处理********/32 33             //空格相隔方式34             $(".btn-test").live("mouseout click", function () {35                 //显示隐藏p36                 $(".container").slideToggle();37             });38 39             //大括号替代方式40             $(".btn-test").live({41                 "mouseout": function () {42                     alert("这是mouseout事件!");43                 },44                 "click": function () {45                     $(".container").slideToggle();46                 }47             });48 49             /********删除事件处理********/50             $(".btn-test").die("click");51             52         });53     </script>54 </head>55 <body>56     <input type="button" value="按钮" class="btn-test" />57     <p class="container">58     </p>59 </body>60 </html>
Nach dem Login kopieren

View Code

适用Jquery版本

  jquery1.9版本以下支持,jquery1.9及其以上版本删除了此方法,jquery1.9以上版本用on()方法来代替。

delegate()

简要描述

  delegate() 为指定的元素(被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。

使用方式 

  $(selector).delegate(childSelector,event,data,function)

  childSelector: 必需项;需要添加事件处理程序的元素,一般为selector的子元素;

  event:必需项;添加到元素的一个或多个事件,例如 click,dblclick等;

      单事件处理:例如 $(selector).delegate(childselector,"click",data,function);

      多事件处理:1.利用空格分隔多事件,例如 $(selector).delegate(childselector,"click dbclick mouseout",data,function);

            2.利用大括号灵活定义多事件,例如 $(selector).delegate(childselector,{event1:function, event2:function, ...}) 

            3.空格相隔方式:绑定较为死板,不能给事件单独绑定函数,适合处理多个事件调用同一函数情况;

               大括号替代方式:绑定较为灵活,可以给事件单独绑定函数;     

  data:可选;需要传递的参数;

  function:必需;当绑定事件发生时,需要执行的函数;

举例说明


 1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3     <title>jquery中delegate()绑定事件方式</title> 4     <style type="text/css"> 5         .container 6         { 7             width: 300px; 8             height: 300px; 9             border: 1px #ccc solid;10             background-color: Green;11         }12         .btn-test13         {14             border: 1px #ccc solid;15             padding: 5px 15px;16             cursor: pointer;17         }18     </style>19     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>20     <script type="text/javascript">21         $(function () {22 23             /***********单元素添加单事件***********/24 25             //按钮绑定单击事件 实现p的显示隐藏26             $(".header").delegate("#btn-test1", "click", function () {27                 $(".container").slideToggle();28             });29 30 31             /***********单元素添加多事件***********/32 33             //空格相隔方式34             $(".header").delegate("#btn-test1", "click mouseout", function () {35                 $(".container").slideToggle();36             });37 38             //大括号替代方式39             $(".header").delegate("#btn-test1", {40                 "mouseout": function () {41                     alert("这是mouseout事件!");42                 },43                 "click": function () {44                     $(".container").slideToggle();45                 }46             });47 48 49         });50     </script>51 </head>52 <body>53     <p class="header">54         <input type="button" value="按钮1" class="btn-test" id="btn-test1" />55         <input type="button" value="按钮2" class="btn-test" id="btn-test2" />56     </p>57     <p class="container">58     </p>59 </body>60 </html>
Nach dem Login kopieren

View Code

适用Jquery版本

 jque ry1.4.2 und höher;

on()

Kurze Beschreibung

 on() für das angegebene Element Eins oder hinzufügen Weitere Ereignishandler und gibt Funktionen an, die ausgeführt werden sollen, wenn diese Ereignisse auftreten. Ereignishandler, die die Methode on() verwenden, gelten für aktuelle oder zukünftige Elemente (z. B. neue Elemente, die von einem Skript erstellt wurden). $(selector) ).on(event,childselector,data,function)

 

event :

Erforderlich; ein oder mehrere Ereignisse, die dem Element hinzugefügt wurden, z. B. Klick, Doppelklick usw.;

Einzelereignisverarbeitung: z als

$(selector).on("click",childselector,data,function);

Verarbeitung mehrerer Ereignisse: 1. Verwenden Sie Leerzeichen, um mehrere Ereignisse zu trennen, z. B. $(selector). ,Funktion);

            2.利用大括号灵活定义多事件,例如 $(selector).on({event1:function, event2:function, ...},childselector); 

            3.空格相隔方式:绑定较为死板,不能给事件单独绑定函数,适合处理多个事件调用同一函数情况;

               大括号替代方式:绑定较为灵活,可以给事件单独绑定函数; 

  childSelector: 可选;需要添加事件处理程序的元素,一般为selector的子元素;    

  data:可选;需要传递的参数;

  function:必需;当绑定事件发生时,需要执行的函数;

举例说明


 1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3     <title>jquery中on()绑定事件方式</title> 4     <style type="text/css"> 5         .container 6         { 7             width: 300px; 8             height: 300px; 9             border: 1px #ccc solid;10             background-color: Green;11         }12         .btn-test13         {14             border: 1px #ccc solid;15             padding: 5px 15px;16             cursor: pointer;17         }18     </style>19     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>20     <script type="text/javascript">21         $(function () {22 23             /*********添加单个事件处理*********/24 25             $(".header").on("click", ".btn-test", function () {26                 //显示隐藏p27                 $(".container").slideToggle();28             });29 30             /********添加多个事件处理********/31 32             //空格相隔方式33             $(".header").on("mouseout click", ".btn-test", function () {34                 //显示隐藏p35                 $(".container").slideToggle();36             });37 38             //大括号替代方式39             $(".header").on({40                 "mouseout": function () {41                     alert("这是mouseout事件!");42                 },43                 "click": function () {44                     $(".container").slideToggle();45                 }46             }, ".btn-test");47 48             //删除事件49             $(".header").off("click", ".btn-test");50 51         });52     </script>53 </head>54 <body>55     <p class="header">56         <input type="button" value="按钮" class="btn-test" />57     </p>58     <p class="container">59     </p>60 </body>61 </html>
Nach dem Login kopieren

View Code

适用Jquery版本

jquery1.7 und höher; nach dem Erscheinen der jquery1.7-Version wird verwendet, um bind zu ersetzen (), live()-Bindungsereignismethode; 🎜> Die Gemeinsamkeiten, Unterschiede, Vor- und Nachteile der vier Methoden

Gleiche Punkte:
1. Beide unterstützen die Bindung einzelner Elemente und mehrere Ereignisse; Leerzeichen-Trennungsmethode oder Klammerersetzungsmethode; 2. Alle Ereignisse werden durch Ereignis-Bubbling an das Dokument übergeben >

比较和联系:

 

1.bind()函数只能针对已经存在的元素进行事件的设置;但是live(),on(),delegate()均支持未来新添加元素的事件设置;演示代码如下:


 1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3     <title>jquery中四种方式给未来元素设置事件</title> 4     <style type="text/css"> 5         .container 6         { 7             width: 300px; 8             height: 300px; 9             border: 1px #ccc solid;10             background-color: Green;11         }12         .btn-test13         {14             border: 1px #ccc solid;15             padding: 5px 15px;16             cursor: pointer;17         }18     </style>19     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>20     <script type="text/javascript">21         $(function () {22 23             //利用bind()方法,给P标签设置click方法   ======失败 没有任何反应=======24             $(".container p").bind("click", function () {25                 alert("bind()添加单击事件成功!");26             });27 28             //利用live()方法.给P标签设置click方法   =======成功调用方法============29             $(".container p").live("click", function () {30                 alert("live()添加单击事件成功!");31             });32 33             //利用delegate()方法.给P标签设置click方法  =======成功调用方法============34             $(".container").delegate("p", "click", function () {35                 //显示隐藏p36                 alert("delegate()添加单击事件成功!");37             });38 39             //利用on()方法.给P标签设置click方法  =======成功调用方法============40             $(".container").on("click", "p", function () {41                 //显示隐藏p42                 alert("on()添加单击事件成功!");43             });44 45             //按钮添加P标签46             $(".btn-test").click(function () {47                 $(".container").append("<p>这是新增的段落!</p>");48             });49         });50     </script>51 </head>52 <body>53     <input type="button" class="btn-test" value="添加元素" />54     <p class="container">55     </p>56 </body>57 </html>
Nach dem Login kopieren

View Code

 

2. Die Funktion bind() war vor der Veröffentlichung von jquery Version 1.7 relativ beliebt. Nach der Veröffentlichung von Version 1.7 wird bind() nicht mehr offiziell empfohlen und die alternative Funktion ist on(). Dies gilt auch für die neu hinzugefügten Funktionen in Version 1.7 >

Wird verwendet, um die gelöschte Funktion live() zu ersetzen in Version 1.9;

3. Die Live()-Funktion ähnelt der Delegate()-Funktion, aber die Die Funktion live() wird in Bezug auf Geschwindigkeit, Flexibilität und CSS-Selektor schlechter ausgeführt. Wenn Sie die spezifische Situation erfahren möchten, klicken Sie bitte hier:

 http://kb.cnblogs.com/page/94469/

4. bind() unterstützt alle Versionen von JQuery; >  

Zusammenfassung

   

 

Wenn es sich bei der im Projekt referenzierten JQuery-Version um eine niedrigere Version handelt, wird empfohlen, Delegate() zu verwenden. Für höhere Versionen von JQuery kann on() verwendet werden Stattdessen wird oben nur eine persönliche Meinung verwendet. Wenn Sie andere Ideen haben, können Sie diese gerne mitteilen.

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Ereignisbindungsmethoden bind(), live(), Delegate() und on() in Jquery. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage