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;
// 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 ; > 코드는 다음과 같습니다: