2013-03-27 63 views
2

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

$.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)的事实有关。

问题是我该如何处理发生在其他对象上的事件。

回答

2

您可以使用$.proxy改变函数内部的this参考:

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

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

Fiddle

我使用的事件命名空间更容易去除处理,所以你并不需要一个参考$.proxy生成的函数。

+0

这很好。需要阅读关于代理。非常感谢! – 2013-03-27 12:41:47