javascript - jQuery绑定事件一种奇怪的写法不明白
PHP中文网
PHP中文网 2017-04-11 11:12:51
[JavaScript讨论组]

在看别人的一个datepicker插件的源码的时候,看到它里面绑定事件大量的这种代码

_bindEvents : function () {
            this.$el.on(this.opts.showEvent + '.adp', this._onShowEvent.bind(this));
            this.$el.on('mouseup.adp', this._onMouseUpEl.bind(this));
            this.$el.on('blur.adp', this._onBlur.bind(this));
            this.$el.on('keyup.adp', this._onKeyUpGeneral.bind(this));
            $(window).on('resize.adp', this._onResize.bind(this));
            $('body').on('mouseup.adp', this._onMouseUpBody.bind(this));
        },

第一次见过这种事件后面加上adp的写法,甚是不解。有了解的同学可以帮忙解释一下么。

代码来源:
https://github.com/t1m0n/air-...

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
PHP中文网

jQuery中文文档 - on函数
看一下后边的“命名空间”

黄舟

所谓的 adp 应该是 自定义的事件

黄舟

问题已经找到答案了。event.adp后面的adp是event的命名空间。adp是个自己随意取得名字。你也可以给它取名叫amao,agou。添加了这个标识意味着这个事件存放在adp这个命名空间下。如果你之后要触发、移除、绑定特定的事件,你就可以借助这个小东西了。Whatever,这个玩意儿就是干了个区分的事情。get到这一点,你应该明白了这个东西。

为啥要这么做呢?

此为情景一:写jQuery的插件时,需要给element绑定插件自己的事件,但是有时候插件需要销毁自身(经常见到的destroy),这个时候需要解绑事件。但是element自身也可能绑定了事件,如果贸然用off解绑,必然会解绑全部的事件。于是我们可以通过off('click',handle)来解绑我们的事件和处理函数(handle),但是我们绑定事件时经常用的是匿名函数,匿名函数就不能用off(event, handle)的方式了。因此jQuery发明了event namespace 这个玩意儿,解绑的时候,就可以直接解绑这个命名空间的函数了(而不会解绑element自己的事件)。

来个解绑的例子:

destroy: function () {
            var _this = this;
            _this.$el
                .off('.adp')
                .data('datepicker', '');

            _this.selectedDates = [];
            _this.focused = '';
            _this.views = {};
            _this.keys = [];
            _this.minRange = '';
            _this.maxRange = '';

            if (_this.opts.inline || !_this.elIsInput) {
                _this.$datepicker.closest('.datepicker-inline').remove();
            } else {
                _this.$datepicker.remove();
            }
        },

看见没,这样解绑事件就很方便啦!

同样,在触发事件的时候,我们也可以只触发特定的事件。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号