2

我正在创建一个特殊事件,如Brandon Aaron的文章中所述, 此事件需要在窗口调整大小时触发。

$.event.special.myevent = {
setup: function () {
    $(window).bind("resize", $.event.special.myevent.handler);
},

teardown: function () {
    $(window).unbind("resize", $.event.special.myevent.handler);
},

handler: function (e) {
    var $this = $(this);

    //some other rulles

    console.log("handler function");

    e.type = "myevent";

    jQuery.event.handle.apply(this, arguments);
}

}

绑定到事件:

$("#myDiv1").bind("myevent", function () {
    alert("my event sub");
})

问题: $("#myDiv1")没有收到事件。这似乎与在设置中我触发$(window)而不是$(this).

问题是我怎样才能让事件依赖于其他对象上发生的事件。

4

1 回答 1

2

您可以使用$.proxy更改this函数内部的引用:

setup: function () {
    $(window).on("resize.myevent", $.proxy($.event.special.myevent.handler, this));
},

teardown: function () {
    $(window).off("resize.myevent");
},

小提琴

我使用了一个事件命名空间来更轻松地删除处理程序,因此您不需要引用由$.proxy.

于 2013-03-27T12:25:12.617 回答