2013-04-10 4 views
0

내 코드에 문제가 있습니다. 먼저 내 코드를 붙여 넣으십시오. 대부분 중요하지 않습니다.onClick 이벤트 호출

   $("#navbar > a").click(function(event) { 
       $('#controls').show(); 
       var currentNum = parseInt($(this).attr('class'), 10); 
       document.getElementById('pNum').innerHTML = "pg. " + (currentNum + 1); 
       event.preventDefault(); 

       var t2 = ($(this).attr('id')).split("#"); 
       var $tr = $(zip.file(localStorage.selected + "/" + t2[0]).asText()); 
       document.getElementById('main').innerHTML = ""; 
       $('#main').append($tr); 
       document.getElementById(t2[1]).scrollIntoView() 
       current = ($(this).attr('class')); 
       $(function() { 
        $("#main img").each(function() { 
         var imgPath = localStorage.selected + "/" + $(this).attr('src'); 
         var imageData = zip.file(imgPath).asBinary(); 
         $(this).attr('src', 'data:image/jpeg;base64,' + btoa(imageData)); 
        }); 

       }); 

       $("#main a").click(function(event){ 
        event.preventDefault(); 
        var elems = ($(this).attr('href')).split("#"); 
        var $path = $(zip.file(localStorage.selected + "/" + elems[0]).asText()); 
        document.getElementById('main').innerHTML = ""; 
        $('#main').append($path); 
       }); 
      }); 

이제 하단의 클릭 이벤트는 나는 경우가 내가 처음으로 전화를 한 후 두 번째로는 한 번만 작동하지 말아야 콘텐츠를 만들어내는 코드 내부에 배치하는 경우 작동 그것은 일하는 것을 거부한다, 어떤 제안이라도?

+0

왜 'document.ready' 함수를 가지고 있고 다른 클릭 이벤트 처리기를'$ ("navbar> a") 안에 바인딩합니까? click 처리기 –

+0

@wirey 나는 어떤 이유로 그것을 말했습니다 공장. – Crossman

답변

4

대신 event delegation을 사용하려는 것 같습니다. 예를 들어 :

$(document).on('click', '#main a', function(event){ 
    event.preventDefault(); 
    var elems = ($(this).attr('href')).split("#"); 
    var $path = $(zip.file(localStorage.selected + "/" + elems[0]).asText()); 
    document.getElementById('main').innerHTML = ""; 
    $('#main').append($path); 
}); 

문제는 $('#main a').click(...) 접근 방식은 #main a 요소가 이미 클릭 핸들러가 바인딩되는 시간에 페이지에 존재하는 것이 필요하다는 것이다.

이벤트 위임을 사용하면 문서 (또는 항상 존재할 다른 요소)에 대한 클릭 이벤트를 수신하고 해당 이벤트가 #main a 요소에서 발생한 것인지 확인할 수 있습니다. 이렇게하면 클릭 핸들러가 바인딩되어 있거나 아직 바인딩되지 않은 것을 걱정하지 않고 즉석에서 요소를 추가/제거 할 수 있습니다.

+0

on() 함수를 사용해 보았습니다. 그러나 어떤 이유로 든 동일한 문제를 일으켰습니다. 클릭 함수가 div를 지우고 새 콘텐츠를 추가하고이를 선택하지 않는 것 같습니다. – Crossman

+0

'$ ('# main a'). on ('click', ...)'을 사용했다면 분명히 같은 문제가 생길 것입니다. 반면에 '$ (document) .on ('클릭 ','#main a ', ...'는 작동해야합니다.) – jmar777

+0

@Crossman 예 .. 다시 코드를 검토하면 문제가 해결 될 것입니다. –

2

난 당신이? : 사용 시도 전에이 문제를 했어

$("<element id>").on('click', this, function() 
{ 
     // Your code here 
} 

참조 : http://api.jquery.com/on/

편집 * 죄송 전에 대답을 보지 못했다 (답 더 나은 설명을 위) - 그러나 나는 참고를 위해 나의 것을 지킬 것이다.