2015-01-20 3 views
0
$(document).on('click', '#JS_btn1', function(e) { 
    var self = $(this); 
    setTimeout(function(){ 
    self.parent('div').html('<a href="javascript:void(0);" class="btn_ok" id="JS_btn2">OK</a>'); 
    }); 
}) 

코드는 # JS_btn1이 청취자 이벤트를 완료하기 전에 # JS_btn2로 대체되었음을 보여줍니다. 이제 문제는 IE7/8에서 setTimeout을 사용하여 오류를 방지해야하는 이유는 무엇입니까?이 코드에 setTimeout이 필요한 이유는 무엇입니까?

+1

오류 메시지가 무엇입니까? –

+1

누가 오류를 방지해야한다고 말합니까? 어떤 오류입니까? – epascarello

+1

'setTimeout'에서 타임 아웃없이 코드를 래핑하면 "현재 실행중인 코드가 실행될 때까지 기다린 다음 콜백을 실행합니다"라는 의미입니다. 어쩌면 그것이 당신의 질문에 대답 할 것입니다. – andrusieczko

답변

1

대체로 IE 7/8이 대체 할 DOM 노드에 대한 참조를 보유하고 있으며 nodeName을 검색하려고합니다. 함수와 DOM에서 노드가 제거 되었기 때문에 IE는 오류를 throw합니다. setTimeout()을 호출하면 호출자가 교체하기 전에 호출자가 노드를 해제 할 수 있습니다.

관련 문제