>  기사  >  웹 프론트엔드  >  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;
// window 객체의 특수 바인딩 이벤트 제외:
var windowEvents = $(window). data('__events__' ; 🎜> 코드는 다음과 같습니다:

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




코드 복사


코드는 다음과 같습니다.




버그 소스



코드 복사


코드는 다음과 같습니다.


// event.js, jQuery.event.add:
// jQuery 1.4.1
handlers = events[ type ] = {};
// jQuery 1.4.2

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 복제 버그