浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式

版权所有,禁止匿名转载;禁止商业使用。

 

因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能帮助到园友,文中如有不当之处,还望各位指正,话不多说,直接进入正题。

bind()

简要描述

bind()  向匹配元素添加一个或多个事件处理器。

使用方式

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


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

单事件处理:例如
 

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


多事件处理:1.利用空格分隔多事件,例如

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


2.利用大括号灵活定义多事件,例如

$(selector).bind({event1:function, event2:function, ...})


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

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

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


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


举例说明

<html xmlns="
http://www.w3.org/1999/xhtml
">
 <head>
     <title>jquery中bind()绑定事件方式</title>
     <style type="text/css">
         .container
         {
             width: 300px;
             height: 300px;
             border: 1px #ccc solid;
             background-color: Green;
         }
         .btn-test
         {
             border: 1px #ccc solid;
             padding: 5px 15px;
             cursor: pointer;
         }
     </style>
     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         $(function () {
 
             /*********添加单个事件处理*********/
 
             $(".btn-test").bind("click", function () {
                 //显示隐藏div
                 $(".container").slideToggle();
             });
 
             /********添加多个事件处理********/
 
             //空格相隔方式
             $(".btn-test").bind("mouseout click", function () {
                 //显示隐藏div
                 $(".container").slideToggle();
             });
 
             //大括号替代方式
             $(".btn-test").bind({
                 "mouseout": function () {
                     alert("这是mouseout事件!");
                 },
                 "click": function () {
                     $(".container").slideToggle();
                 }
             });
 
             /********删除事件处理********/
             $(".btn-test").unbind("click");
 
         });
     </script>
 </head>
 <body>
     <input type="button" value="按钮" class="btn-test" />
     <div class="container">
     </div>
 </body>
 </html>


适用Jquery版本

适用所有版本   ,但是根据官网解释,自从jquery1.7版本以后bind()函数 推荐用on()来代替。 


live()

简要描述

live()   向 当前或未来的匹配元素   添加一个或多个事件处理器;

使用方式

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


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

单事件处理:例如

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


多事件处理:1.利用空格分隔多事件,例如

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


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


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

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

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


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


举例说明

 <html xmlns="
http://www.w3.org/1999/xhtml
">
  <head>
      <title>jquery中live()绑定事件方式</title>
      <style type="text/css">
          .container
          {
              width: 300px;
              height: 300px;
              border: 1px #ccc solid;
             background-color: Green;
         }
         .btn-test
        {
             border: 1px #ccc solid;
             padding: 5px 15px;
             cursor: pointer;
         }
     </style>
     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         $(function () {
 
             /*********添加单个事件处理*********/
 
             $(".btn-test").live("click", function () {
                 //显示隐藏div
                 $(".container").slideToggle();
             });
 
             
             /********添加多个事件处理********/
 
             //空格相隔方式
             $(".btn-test").live("mouseout click", function () {
                 //显示隐藏div
                 $(".container").slideToggle();
             });
             //大括号替代方式
             $(".btn-test").live({
                 "mouseout": function () {
                     alert("这是mouseout事件!");
                 },
                 "click": function () {
                    $(".container").slideToggle();
                 }
             });
 
             /********删除事件处理********/
             $(".btn-test").die("click");
            
         });
    </script>
 </head>
 <body>
     <input type="button" value="按钮" class="btn-test" />
     <div class="container">
     </div>
 </body>
 </html>


适用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: 必需;当绑定事件发生时,需要执行的函数;


举例说明

 <html xmlns="
http://www.w3.org/1999/xhtml
">
 <head>
     <title>jquery中delegate()绑定事件方式</title>
     <style type="text/css">
         .container
         {
             width: 300px;
             height: 300px;
             border: 1px #ccc solid;
             background-color: Green;
         }
         .btn-test
         {
             border: 1px #ccc solid;
             padding: 5px 15px;
             cursor: pointer;
         }
     </style>
     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         $(function () {
 
             /***********单元素添加单事件***********/
 
             //按钮绑定单击事件 实现div的显示隐藏
             $(".header").delegate("#btn-test1", "click", function () {
                 $(".container").slideToggle();
             });
 
 
             /***********单元素添加多事件***********/
 
             //空格相隔方式
             $(".header").delegate("#btn-test1", "click mouseout", function () {
                 $(".container").slideToggle();
             });
 
             //大括号替代方式
             $(".header").delegate("#btn-test1", {
                 "mouseout": function () {
                     alert("这是mouseout事件!");
                 },
                 "click": function () {
                     $(".container").slideToggle();
                 }
             });
 
 
         });
     </script>
 </head>
 <body>
     <div class="header">
         <input type="button" value="按钮1" class="btn-test" id="btn-test1" />
         <input type="button" value="按钮2" class="btn-test" id="btn-test2" />
     </div>
     <div class="container">
     </div>
 </body>
 </html>


适用Jquery版本

jque                        ry1.4.2                      及其以上版本;                     

on()

简要描述

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

使用方式

$(selector).on(event,childselector,data,function)


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

单事件处理:例如

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


多事件处理:1.利用空格分隔多事件,例如

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


     

2.利用大括号灵活定义多事件,例如

$(selector). on({event1:function, event2:function, ...},childselector);


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

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

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

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


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


举例说明
 

<html xmlns="
http://www.w3.org/1999/xhtml
">
 <head>
     <title>jquery中on()绑定事件方式</title>
     <style type="text/css">
         .container
         {
             width: 300px;
             height: 300px;
             border: 1px #ccc solid;
             background-color: Green;
         }
         .btn-test
         {
             border: 1px #ccc solid;
             padding: 5px 15px;
             cursor: pointer;
         }
     </style>
     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         $(function () {
 
             /*********添加单个事件处理*********/
 
             $(".header").on("click", ".btn-test", function () {
                 //显示隐藏div
                 $(".container").slideToggle();
             });
 
             /********添加多个事件处理********/
 
             //空格相隔方式
             $(".header").on("mouseout click", ".btn-test", function () {
                 //显示隐藏div
                 $(".container").slideToggle();
             });
 
             //大括号替代方式
             $(".header").on({
                 "mouseout": function () {
                     alert("这是mouseout事件!");
                 },
                 "click": function () {
                     $(".container").slideToggle();
                 }
             }, ".btn-test");
 
             //删除事件
             $(".header").off("click", ".btn-test");
 
         });
     </script>
 </head>
 <body>
     <div class="header">
         <input type="button" value="按钮" class="btn-test" />
     </div>
     <div class="container">
     </div>
 </body>
 </html>


适用Jquery版本

jquery1.7

四种方式的异同和优缺点

相同点:


1.都支持单元素多事件的绑定;空格相隔方式或者大括号替代方式;

2.均是通过事件冒泡方式,将事件传递到document进行事件的响应;

<html xmlns="
http://www.w3.org/1999/xhtml
">
 <head>
     <title>jquery中四种方式给未来元素设置事件</title>
     <style type="text/css">
         .container
         {
             width: 300px;
             height: 300px;
             border: 1px #ccc solid;
             background-color: Green;
         }
         .btn-test
         {
             border: 1px #ccc solid;
             padding: 5px 15px;
             cursor: pointer;
         }
     </style>
     <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         $(function () {
 
             //利用bind()方法,给P标签设置click方法   ======失败 没有任何反应=======
             $(".container p").bind("click", function () {
                 alert("bind()添加单击事件成功!");
             });
 
             //利用live()方法.给P标签设置click方法   =======成功调用方法============
             $(".container p").live("click", function () {
                 alert("live()添加单击事件成功!");
             });
 
             //利用delegate()方法.给P标签设置click方法  =======成功调用方法============
             $(".container").delegate("p", "click", function () {
                 //显示隐藏div
                 alert("delegate()添加单击事件成功!");
             });
 
             //利用on()方法.给P标签设置click方法  =======成功调用方法============
             $(".container").on("click", "p", function () {
                 //显示隐藏div
                 alert("on()添加单击事件成功!");
             });
 
             //按钮添加P标签
             $(".btn-test").click(function () {
                 $(".container").append("<p>这是新增的段落!</p>");
             });
         });
     </script>
 </head>
 <body>
     <input type="button" class="btn-test" value="添加元素" />
     <div class="container">
     </div>
 </body>
 </html>


总结

如果项目中引用jquery版本为低版本,推荐用delegate(),高版本jquery可以使用on()来代替,以上仅为个人看法,如有不同想法,欢迎拍砖交流。


 

 

0 0