jQuery - 在自定义函数中使用$(this)

时间:2011-05-24 16:37:34

标签: javascript jquery dom

我正在尝试创建一个取消绑定然后绑定事件的自定义函数。它看起来像这样:

App.bindEvent = function(selector, eventType, eventHandler) {
    $(selector).unbind(eventType);
    $(selector).bind(eventType, function(event) {
        eventHandler(event);
    });
};

但是,我遇到的问题是我不能使用this关键字来引用被单击的DOM元素。例如,我不能这样做:

App.bindEvent("#my-element", "click", function() {
    var myId = $(this).attr("data-my-id");
});

我如何将this关键字指向点击的DOM元素,就像在jQuery.bind()中一样?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

变化:

eventHandler(event);

要:

eventHandler.call(this, event);

这会将您的函数的“范围”更改为与原始“绑定”调用的范围相同。

答案 1 :(得分:2)

相反如何:

App.bindEvent = function(selector, eventType, eventHandler) {
    var element = this;

    $(selector).unbind(eventType);
    $(selector).bind(eventType, function(event) {
        eventHandler.call(element, event);
    });
};

答案 2 :(得分:1)

您需要在对象的上下文中call处理程序:

eventHandler.call(this, event);

答案 3 :(得分:0)

我认为您正在尝试参考

event.target

例如:

App.bindEvent("#my-element", "click", function(event) {
    var myId = $(event.target).attr("data-my-id");
});

结帐jquery's event documentation