2014-12-08 6 views
-1

클래스가 PhotoUploadSubmit 인 버튼이 몇 개 있습니다. 버튼을 클릭하면 맞춤형 클릭 핸들러가 형제 요소 등을 확인하는 데 사용됩니다. 클릭 핸들러가 작동하지 않습니다. debugger 중단 점은 치지 않으며 전 완전히 당황 스럽습니다. 나는 무엇을 시도했다 측면에서클릭 핸들러가 작동하지 않음

<div class="formDataContext"> 
    <input type="file" name="ImageData" style="display:none" /> 
    <button class="PhotoUploadSubmit"><i class="fa fa-camera fa-5x"></i></button> 
</div> 

<script type="text/javascript"> 

$(function() { 
    $(".PhotoUploadSubmit").on("click", function() { 
     debugger; 
     var currentFormDataContext = $(this).closest(".formDataContext"); 
     console.log(currentFormDataContext); 
     var FileInput = currentFormDataContext.find("input:file")[0]; 
     console.log(FileInput); 
     $(FileInput).click(); 
    }); 

    $("input:file").change(function() { 
     var currentFormDataContext = $(this).closest(".formDataContext"); 
     uploadImage(currentFormDataContext); 
    }); 
}); 

</script> 

, 나는 document.ready 외부의 클릭 핸들러를 넣어 시도했습니다, 나는 debugger; 키워드를 사용하여 시도했다, 난 브레이크 포인트를 설정하려고했습니다. 콘솔 오류가 없습니다.

+1

페이지에 jquery.js를 포함 시켰습니까? – AlienWebguy

+1

버튼이 페이지에 동적으로 추가 되었습니까? –

+0

@AlienWebguy 예, jQuery가 포함되어 있으며 그 밖의 모든 것이 잘 작동합니다. – alex

답변

3

buttons은 동적으로 추가되므로 delegate이 될 수 있습니다. 예 :

$("body").on("click", '.PhotoUploadSubmit', function() { 
    debugger; 
    var currentFormDataContext = $(this).closest(".formDataContext"); 
    console.log(currentFormDataContext); 
    var FileInput = currentFormDataContext.find("input:file")[0]; 
    console.log(FileInput); 
    $(FileInput).click(); 
}); 
+0

이 사용하여 문제를 해결. 나는 버튼이 동적으로 렌더링되었다고 생각하지 않았습니다. 클릭 핸들러가'document.ready' 다음에 해고 되었기 때문에 차이가 있다고 생각하지 않았습니다! – alex

+1

대리인에 대한 설명과 특히 이벤트 버블 링 메커니즘에 대한 설명이 더 좋았을 것입니다. "사람에게 생선을주고 하루 동안 먹이고 남자에게 생선을 가르치면 일생 동안 먹일 수 있습니다" –

+0

대표자에 대한 추가 정보 : http://www.sitepoint.com/event-delegation-with - jquery / – MH2K9

관련 문제