ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 在使用jQuery代理时保留两个`this`引用

2019-06-09 20:23:11  阅读:220  来源: 互联网

标签:jquery javascript this


我正在编写一个jQuery插件,并且在将事件附加到函数时使用$.proxy保持上下文.像这样的东西:

function myPlugin(element) {
    this.element = $(element);
}

$.extend(myPlugin.prototype, {
    init: function() {
        this.btns = this.element.find('.control-btns');
        this.register_events();
    },

    register_events: function() {
        this.btns
            .off('click.myplugin')
            .on('click.myplugin', $.proxy(this.foo, this));                   
    },

    foo: function(e) {
        this.bar();
        var btnClicked = $(e.target);
    },

    bar: function() {
        // some code here
    }
});

正如你所看到的,当运行foo时,我需要有一个正确的上下文,以便能够调用bar函数(它只是为了示例,我做的不仅仅是调用一个特定的函数).

但是,我还需要另一个 – 表示单击按钮的那个.我认为e.target就够了,但事实证明它捕获了被点击的东西,而不是带有事件监听器的元素 – 即如果我的按钮有一些内部区域(比如一个跨度),点击它会传播,但是然后e.target将指向< span>而不是< button>.我做了一个small demo显示问题.

我怎样才能传递正确的这个背景,而不会丢失我本来会得到的那个?

解决方法:

而不是目标,你需要currentTarget. currentTarget是你附加事件处理程序的元素.

demo

标签:jquery,javascript,this
来源: https://codeday.me/bug/20190609/1207160.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有