Maison  >  Article  >  interface Web  >  Explication détaillée des méthodes d'événement de liaison Jquery délégué(),bind(),live(),on()

Explication détaillée des méthodes d'événement de liaison Jquery délégué(),bind(),live(),on()

黄舟
黄舟original
2017-06-26 10:02:03962parcourir

Avant-propos

Étant donné que jquery est souvent utilisé pour ajouter et supprimer des éléments dom dans les projets, la méthode d'événement de liaison des éléments dom sera impliquée. Résumons brièvement les différences entre bind, live, délégué et on. , pour référence future, et j'espère que cet article pourra aider les jardiniers à l'avenir. S'il y a quelque chose d'inapproprié dans l'article, j'espère que vous me corrigerez, sans plus tarder, allons droit au but.

bind()

Brève description

  bind()Ajoute un ou plusieurs gestionnaires d'événements à l'élément correspondant.

Comment utiliser

 $(sélecteur).bind(événement, données, fonction)

Événement : obligatoire ; un ou plusieurs événements ajoutés à l'élément, tels que click, dblclick, etc. ;

Traitement d'un événement unique : par exemple, $(selector).bind("click",data,function);

Traitement multi-événements : 1. Utilisez des espaces pour séparer plusieurs événements, tels que $(selector).bind("click dbclick mouseout",data,function);

2. Utilisez des accolades pour définir de manière flexible plusieurs événements, tels que $(sélecteur ).bind({event1:function , event2:function, ...}) 

                                                                                                                                      Appel de la même fonction

Alternative aux accolades : la liaison est plus flexible et vous pouvez lier des fonctions aux événements séparément

données : facultatif ; paramètres qui doivent être transmis

function : obligatoire lorsque lié La fonction qui doit être exécutée lorsqu'un certain événement se produit ; 🎜>

Exemples

<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>

Afficher le code

Version Jquery applicable

 S'applique à toutes les versions, mais selon le site officiel, depuis la version jquery1.7, la fonction bind() Il est recommandé d'utiliser on() à la place.

live()

Brève description

 live() Vers l'élément correspondant actuel ou futur Ajouter un ou plusieurs gestionnaires d'événements

Utilisation

 $(sélecteur).live(événement,données,fonction)

Événement : Obligatoire ; un ou plusieurs éléments ajoutés aux événements d'élément, tels que comme click, dblclick, etc. ;

  Traitement d'un événement unique : tel que $(selector).live ("clic", données, fonction);

Traitement multi-événements : 1. Utilisez des espaces pour séparer plusieurs événements Événements, tels que $(sélecteur).live("cliquez sur dbclick mouseout", données, fonction);

2. Utilisez des accolades pour définir de manière flexible plusieurs événements, tels que $(sélecteur). live({event1:function, event2:function, ...}) 

3. Méthode de séparation d'espace : la liaison est relativement rigide et ne peut pas lier des fonctions à des événements séparément. Elle convient à la gestion de plusieurs événements appelant la même fonction ;

    Alternative aux accolades : la liaison est plus flexible et vous pouvez lier des fonctions aux événements individuellement ;   

données : facultatif ; paramètres qui doivent être transmis

  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>

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

举例说明

<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>

View Code

适用Jquery版本

 jque ry1.4.2 et plus

on()

Brève description

 on() pour l'élément spécifié, ajoutez Un ou plus de gestionnaires d'événements et spécifie les fonctions à exécuter lorsque ces événements se produisent. Les gestionnaires d'événements utilisant la méthode on() fonctionnent sur les éléments actuels ou futurs (tels que les nouveaux éléments créés par un script). $(selector) .on(event,childselector,data,function)

 

événement :

Obligatoire ; un ou plusieurs événements ajoutés à l'élément, tels que click, dblclick, etc.

Traitement d'un seul événement : tel comme

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

Traitement multi-événements : 1. Utilisez des espaces pour séparer plusieurs événements, tels que $(sélecteur). on("cliquez

dbclick mouseout", childseletor, data ,fonction);

            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>


View Code

适用Jquery版本

jquery1.7 et supérieur ; après l'apparition de la version jquery1.7, est utilisé pour remplacer bind (), méthode d'événement de liaison live() ;

Les similitudes, les différences, les avantages et les inconvénients des quatre méthodes

Mêmes points :

1. Les deux prennent en charge la liaison d'éléments uniques et plusieurs événements ; espaces Méthode de séparation ou méthode de substitution d'accolades ; 2. Tous les événements sont transmis au document pour la réponse aux événements via le bouillonnement d'événements ; >

比较和联系:

 

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

<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>

 

2. La fonction bind() était relativement populaire avant la version 1.7 de jquery. Après la sortie de la version 1.7, bind() n'est plus officiellement recommandée et la fonction alternative est on(). C'est aussi Les fonctions nouvellement ajoutées dans la version 1.7, de même, peuvent être

Utilisé pour remplacer la fonction live(), qui a été supprimée en version 1.9

3. La fonction live() est similaire à la fonction délégué(), mais la fonction live() présente des avantages. en termes de vitesse d'exécution, de flexibilité et le le sélecteur CSS est moins pris en charge que le délégué()

4.bind() prend en charge toutes les versions de Jquery ; live() prend en charge jquery1.8- ; délégué() prend en charge jquery1.4.2+ ; on() prend en charge jquery1.7+ ; >Résumé Si le La version de jquery référencée dans le projet est une version inférieure, il est recommandé d'utiliser délégué(), les versions supérieures de jquery peuvent utiliser on() à la place. Ce qui précède n'est que mon opinion personnelle. Si vous avez des idées différentes, n'hésitez pas à communiquer. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn