跃然一笑
2012 年8月24日:在jQuery 1.8中,不再可以使用来访问元素的事件.data('events')。(有关详细信息,请参见此bug。)可以使用jQuery._data(elem, 'events')内部数据结构访问相同的数据,该内部数据结构未记录,因此不能保证100%保持稳定。但是,这应该不成问题,并且上面插件代码的相关行可以更改为以下内容:var data = jQuery._data(this[0], 'events')[type];jQuery事件存储在名为的数据对象中events,因此您可以在其中进行搜索:var button = $('#myButton');if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) { button.click(onButtonClicked);}当然,最好是可以构造应用程序,以使该代码仅被调用一次。可以将其封装到插件中:$.fn.isBound = function(type, fn) { var data = this.data('events')[type]; if (data === undefined || data.length === 0) { return false; } return (-1 !== $.inArray(fn, data));};然后,您可以致电:var button = $('#myButton');if (!button.isBound('click', onButtonClicked)) { button.click(onButtonClicked);}