jQuery クローンのバグ ソリューション code_jquery
- WBOYオリジナル
- 2016-05-16 18:13:401003ブラウズ
まず、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 ; > コードは次のとおりです: