ホームページ  >  記事  >  ウェブフロントエンド  >  jQuery クローンのバグ ソリューション code_jquery

jQuery クローンのバグ ソリューション code_jquery

WBOY
WBOYオリジナル
2016-05-16 18:13:40944ブラウズ

まず、jQuery イベントをバインドするとき、すべてのイベントは $.data() メソッドを使用して $.cache に保存され、data('events') を使用して繰り返し取得できます:

コードをコピー コードは次のとおりです:

var $div = $('div.demo'), data = $div.data ();
// すべてのバインディング イベントを取得します:
var events = data.events;
// ウィンドウ オブジェクトの特殊なバインディング イベントを除きます:
var windowEvents = $(window)。 data('__events__' ; 🎜> コードは次のとおりです:

var clickHandler = function(){
console.log('click test');



コードをコピー


コードは次のとおりです:




バグソース



コードをコピー


コードは次のとおりです:


//event.js, jQuery.event.add:
// jQuery 1.4.1
handlers = events[ type ] = {};
// jQuery 1.4.2
handlers = events[ type ] = [];
1.4.2 以降、 events[type] は配列になり、for...in ループはすべてを取得します。メソッドを配列プロトタイプで拡張し、DOM オブジェクトにバインドします。
解決策
配列プロトタイプを拡張せず、clone(true) メソッドを使用しないでください。
hasOwnProperty チェック。
各ループを使用します:




コードをコピーします


コードは次のとおりです:


var self = this;
for ( var type in events ) {
jQuery.each(events[ type ],function(idx,evt) {
jQuery.event.add( self, type, evt.handler, evt.data ; > コードは次のとおりです:
-8" /> jQuery クローンのバグ