jQuery-3.事件篇---事件绑定与解绑

on()的多事件绑定

之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理。翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个"on"方法来实现的。jQuery on()方法是官方推荐的绑定事件的一个方法。

基本用法:.on( events ,[ selector ] ,[ data ] )

最常见的给元素绑定一个点击事件,对比一下快捷方式与on方式的不同

$("#elem").click(function(){})  //快捷方式
$("#elem").on(‘click‘,function(){}) //on方式

最大的不同点就是on是可以自定义事件名,当然不仅仅只是如何,继续往下看

多个事件绑定同一个函数

 $("#elem").on("mouseover mouseout",function(){ });

通过空格分离,传递不同的事件名,可以同时绑定多个事件

多个事件绑定不同函数

$("#elem").on({
    mouseover:function(){},
    mouseout:function(){}
});

通过空格分离,传递不同的事件名,可以同时绑定多个事件,每一个事件执行自己的回调方法

将数据传递到处理程序

function greet( event ) {
  alert( "Hello " + event.data.name ); //Hello 慕课网
}
$( "button" ).on( "click", {
  name: "慕课网"
}, greet );

可以通过第二参数(对象),当一个事件被触发时,要传递给事件处理函数的

<h2>on绑定多事件</h2>

<h4>测试一</h4>
    <div class="left">
        点击触发:on(‘click‘,fn)
        <div id="test1"></div>
    </div>
    <script type="text/javascript">
    //事件绑定一
    $("#test1").on(‘click‘, function(e) {
        $(this).text(‘触发事件:‘ + e.type)
    })
    </script>

<h4>测试二</h4>
    <div class="left">
        点击触发:on(‘mousedown mouseup‘)
        <div id="test2"></div>
    </div>
    <script type="text/javascript">
    //多事件绑定一
    $("#test2").on(‘mousedown mouseup‘, function(e) {
        $(this).text(‘触发事件:‘ + e.type)
    })
    </script>

<h4>测试三</h4>
    <div class="right">
        点击触发:on(mousedown:fn1,mouseup:fn2)
        <div id="test3"></div>
    </div>
    <script type="text/javascript">
    //多事件绑定二
    $("#test3").on({
        mousedown: function(e) {
            $(this).text(‘触发事件:‘ + e.type)
        },
        mouseup: function(e) {
            $(this).text(‘触发事件:‘ + e.type)
        }
    })
    </script>

on()的高级用法

针对自己处理机制中,不仅有on方法,还有根据on演变出来的live方法(1.7后去掉了),delegate方法等等。这些方法的底层实现部分 还是on方法,这是利用了on的另一个事件机制委托的机制衍变而来的

委托机制

.on( events ,[ selector ] ,[ data ], handler(eventObject) )

在on的第二参数中提供了一个selector选择器,简单的来描述下

参考下面3层结构

<div class="left">
    <p class="aaron">
        <a>目标节点</a> //点击在这个元素上
    </p>
</div>

给出如下代码:

$("div").on("click","p",fn)

事件绑定在最上层div元素上,当用户触发在a元素上,事件将往上冒泡,一直会冒泡在div元素上。如果提供了第二参数,那么事件在往上冒泡的过程中遇到了选择器匹配的元素,将会触发事件回调函数

<h2>on事件委托</h2>
    <div class="left">
        <a>陈咪咪</a>
        <div class="aaron">
            <a>111</a>
            <a>点击这里</a>
        </div>
    </div>
    <script type="text/javascript">
    //给body绑定一个click事件
    //没有直接a元素绑定点击事件
    //通过委托机制,点击a元素的时候,事件触发
    $(‘body‘).on(‘click‘, ‘a‘, function(e) {
       alert(e.target.textContent)
    })
    </script>

卸载事件off()方法

  • 通过.on()绑定的事件处理程序
  • 通过off() 方法移除该绑定

根据on绑定事件的一些特性,off方法也可以通过相应的传递组合的事件名,名字空间,选择器或处理函数来移除绑定在元素上指定的事件处理函数。当有多个过滤参数时,只有与这些参数完全匹配的事件处理函数才会被移除

绑定2个事件

$("elem").on("mousedown mouseup",fn)

删除一个事件

$("elem").off("mousedown")

删除所有事件

$("elem").off("mousedown mouseup")

快捷方式删除所有事件,这里不需要传递事件名了,节点上绑定的所有事件讲全部销毁

$("elem").off()

 <h2>删除事件</h2>

    <h4>测试一</h4>    <div class="left">        on(‘mousedown mouseup‘)        <div class="aaron">点击触发</div>    </div>    <button>点击删除mousedown事件</button>    <script type="text/javascript">    var n  = 0;    //绑定事件    $(".aaron:first").on(‘mousedown mouseup‘, function(e) {        $(this).text( ‘触发类型:‘ +  (e.type) + ",次数" + ++n)        ++n;    })

    //删除事件    $("button:first").click(function() {        $(".aaron:first").off(‘mousedown‘)    })       </script>

    <h4>测试一</h4>    <div class="left">        on(‘mousedown mouseup‘)        <div class="aaron">点击触发</div>    </div>    <button>点击销毁所有事件off</button>    <script type="text/javascript">    var n  = 0;    //绑定事件    $(".aaron:last").on(‘mousedown mouseup‘, function(e) {        $(this).text( ‘触发类型:‘ +  (e.type) + ",次数" + ++n)        ++n;    })

    //删除事件    $("button:last").click(function() {        $(".aaron:last").off()    })       </script>
时间: 2024-10-27 20:39:35

jQuery-3.事件篇---事件绑定与解绑的相关文章

jquery中事件重复绑定以及解绑问题

一般的情况下,对于这种情况,我们常规的思路是,先解绑,再绑定,如下: $(selector).unbind('click').bind('click',function(){....}); 当这样会有一个问题,unbind会把其之前的所有的click事件都unbind掉,可能会影响其他的绑定,有如下有两种方法解决: 第一种: 使用事件命令空间,来唯一标识这个click的绑定,这样在解绑是不会将其他click绑定的事件也给解绑. $(selector).unbind('click.selector

Service的启动与停止、绑定与解绑

---恢复内容开始--- Service的意义就在于当软件停止之后还可以在背景中进行运行,换句话也就是说,比如一个音乐播放器,当我们退出音乐播放器的时候,还是希望它在背景中运行,也就是一直播放着音乐,这时候Service就派上了大的用途. Service的生命周期和Activity的生命周期差不多.也有开启和停止.onCreate()方法是初始化配置,onDestroy()是释放所有剩余的资源.Service周期是发生在onCreate()和onDestroy()之间的. startServic

jquery中的DOM事件绑定与解绑

在jquery事件中有时候有的事件只需要在绑定后有效触发一次,当通过e.target判断触发条件有效触发后解除绑定事件,来避免多次无效触发和与未知情况造成冲突. 这时候就要用到了jquery中的事件绑定与事件解绑. 1 $(document).on('click.endEdit',function (e) { 2 if(!$(e.target).hasClass('datagrid-cell')&&e.target.tagName!="TD"){ //事件发生后的判断条

js元素事件绑定与解绑

为元素绑定事件有3种方式: 1.最常见的绑定方式: document.getElementById("btn").onclick=function(){}; 2.非IE浏览器     element.addEventListener(type,fn,false) (布尔值====true表示捕获,false表示冒泡,一般用false): document.getElementById("btn").addEventListener("click"

JQuery_003_事件绑定与解绑

$(function () { //第一个按钮通过on的方式绑定点击事件 $("#btn1").on("click",function () { alert("我被点了"); }); //第二个按钮把第一个按钮的点击事件解绑 $("#btn2").on("click",function () { //off()参数:要解绑的事件的名字 $("#btn1").off("click

jQuery-3.事件篇---事件对象的使用

jQuery事件对象的作用 事件中的Event对象容易被初学者忽略掉,可能大多时候初学者不知道怎么去用它,但有些时候它还是非常有用的 一个标准的"click"点击事件 $(elem).on("click",function(event){ event //事件对象 }) 在不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异.jQuery根据 W3C 标准规范了事件对象,所以在jQuery事件回调方法中获取到的事件对象是经过兼容后处理过的一个标准的跨浏览器对象

jquery 事件- 绑定与解绑

一.on() 的多事件绑定 $("#elem").on("mouseover mouseout",function(){ }); //多个事件绑定一个函数 $("#elem").on({ //多个事件绑定不同函数 mouseover:function(){}, mouseout:function(){} }); <div class="left"> <p class="aaron">

事件绑定与解绑

var EventUtil = { addHandler:function (obj, type, handler) { if(obj.addEventListener) { //如果是标准浏览器,即支持addEventListener的 console.log('标准浏览器'); obj.addEventListener(type, handler); } else if(obj.attachEvent) { //IE低版本浏览器 console.log('IE低版本浏览器'); obj.at

从零开始学 Web 之 jQuery(六)为元素绑定多个相同事件,解绑事件

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.为元素绑定多个