BUG来源 复制代码 代码如下: // event.js, jQuery.event.add: // jQuery 1.4.1 handlers = events[ type ] = {}; // jQuery 1.4.2+ handlers = events[ type ] = []; // manipulation.js, jQuery.clone : , cloneCopyEvent(): for ( var type in events ) { for ( var handler in events[ type ] ) { jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); } }
在1.4.2之后,events[ type ]为数组,for...in循环会获取到数组原型上扩展的所有方法,接着绑定到DOM对象上。 解决 不扩展数组原型,不使用clone(true)方法。 hasOwnProperty检查。 使用each循环: 复制代码 代码如下: var self = this; for ( var type in events ) { jQuery.each(events[ type ],function(idx,evt) { jQuery.event.add( self, type, evt.handler, evt.data ); }); }