본 글에서는 jQuery의 바인딩(), 라이브(), 대리자(), on() 이벤트 메서드를 예제를 통해 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
머리말
jquery는 프로젝트에서 dom 요소를 추가하고 삭제하는 데 자주 사용되므로 dom 요소의 바인딩 이벤트 방법이 포함되므로 나중에 참조할 수 있도록 바인딩, 라이브, 위임의 차이점을 간략하게 요약하겠습니다. 이 기사는 앞으로 내 친구들 모두에게 도움이 될 수 있습니다. 기사에 부적절한 내용이 있으면 더 이상 고민하지 말고 곧바로 요점을 바로잡아 주시기 바랍니다.
1. 바인드()
간단한 설명
bind()는 일치하는 요소에 하나 이상의 이벤트 핸들러를 추가합니다.
사용방법
단일 이벤트 처리: 예를 들어
data: 전달해야 하는 선택적 매개변수입니다.
함수
: 필수; 바인딩 이벤트가 발생할 때 실행되어야 하는 함수
예
<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 버전
모든 버전에 적용 가능하지만, 공식 홈페이지에 따르면 jquery 1.7 버전부터 bin() 함수를 on()으로 대체하는 것을 권장합니다.
2. 라이브()간단한 설명
live()는 현재 또는 미래의 일치 요소에 하나 이상의 이벤트 핸들러를 추가합니다.
사용방법
data
: 전달해야 하는 선택적 매개변수입니다.함수: 필수; 바인딩 이벤트가 발생할 때 실행되어야 하는 함수
예
适用Jquery版本
jquery1.9版本以下支持,jquery1.9及其以上版本删除了此方法,jquery1.9以上版本用on()方法来代替。
三、delegate()
简要描述
delegate() 为指定的元素(被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
使用方式
单事件处理:例如
大括号替代方式:绑定较为灵活,可以给事件单独绑定函数;
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版本
jquery1.4.2及其以上版本;
四、on()
简要描述
on() 为指定的元素,添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。使用 on() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
使用方式
单事件处理:例如
大括号替代方式:绑定较为灵活,可以给事件单独绑定函数;
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及其以上版本;jquery1.7版本出现之后用于替代bind(),live()绑定事件方式;
五、四种方式的异同和优缺点
相同点:
1.都支持单元素多事件的绑定;空格相隔方式或者大括号替代方式;
2.均是通过事件冒泡方式,将事件传递到document进行事件的响应;
比较和联系:
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.bind()函数在jquery1.7版本以前比较受推崇,1.7版本出来之后,官方已经不推荐用bind(),替代函数为on(),这也是1.7版本新添加的函数,同样,可以用来代替live()函数,live()函数在1.9版本已经删除;
3.live()函数和delegate()函数两者类似,但是live()函数在执行速度,灵活性和CSS选择器支持方面较delegate()差些,想了解具体情况,请参考这篇《jQuery中的.bind()、.live()和.delegate()之间区别分析》
4.bind()支持Jquery所有版本;live()支持jquery1.8-;delegate()支持jquery1.4.2+;on()支持jquery1.7+;
六、总结
如果项目中引用jquery版本为低版本,推荐用delegate(),高版本jquery可以使用on()来代替,以上仅为个人看法,如有不同想法,欢迎拍砖交流。
更多关于jQuery事件相关内容感兴趣的读者可查看本站专题:《jQuery常见事件用法与技巧总结》
希望本文所述对大家jQuery程序设计有所帮助。