2014-11-06 2 views
0

다음은 StackOverflow 사용과 같은 markdown 편집기의 일부로 AJAX 스타일 이미지 업로드를 허용하는 데 사용되는 큰 스크립트에서 추출한 일부 JavaScript입니다.jQuery의 unbind ('change') 메소드를 호출하여 변경 이벤트를 트리거하는 이유는 무엇입니까?

HTML 양식 파일 필드를 사용하여 컴퓨터에서 이미지를 선택하자 마자 스크립트가 이미지 업로드를 실행하고 새로 업로드 된 이미지의 URL을 반환합니다.

$file.unbind('change').ajaxfileupload()

내가 unbind('change')change 이벤트에 일어날 업로드를 트리거 이해 ... 특히이 줄하지만 내가 궁금하고있다 내가 더 잘 이해하시기 바랍니다 도움이 필요합니다. 그러나 나는 왜 그것이 사용하는 것입니다로 혼란 스러워요 unbind()

나는 기본적으로 이벤트 처리기를 제거하는 데 사용되는 기능을 이해합니까? 내 논리는 대신 bind()을 사용하지만, 대신 unbind()을 사용한다고 생각합니다. 그러나 나는 왜 그런지 전혀 모른다.
여기에 무엇이 누락 되었습니까? 내 질문에 대답하기에 충분한 코드가 여기에 있습니까?

unbind()은 이벤트 처리기를 더 이상 작동하지 않도록 제거/중지하는 데 사용됩니다. 내가 옳다면 그 반대의 일을하는 요소에 왜 이것이 붙어 있고 업로드를 유발할 이미지를 기다리고 있을지 모르겠습니다.

바라건대이 모든 것이 누군가에게 의미가 있으며, 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 이해하기 쉬운 대답은 훌륭합니다, 감사합니다!

var $file = $('input[type=file]', $dialog); 

// upload 
$file.unbind('change').ajaxfileupload({ 
    action: $file.attr('data-action'), 
    params: { 
     enctype: 'multipart/form-data' 
    }, 
    onStart: uploadStart, 
    //onComplete: uploadComplete 
    'onComplete': function(response) { 
     console.log(response); 
     alert(JSON.stringify(response)); 
    } 
}); 
+2

'unbind ('change')'는 변경 이벤트를 트리거하지 않습니다. 해당 요소 (들)에 현재있는 이벤트 핸들러를 제거하기 만하면됩니다. 이전에 바인드 된 이벤트의 바인드 해제는 아마도 파일의 중복 처리를 방지하기위한 것입니다. –

+0

@PatrickEvans가 옳습니다. 아마도 이것을 수행하는 더 깔끔한 방법은 [.one()] (http://api.jquery.com/one/)을 사용하고 필요할 때 다시 바인딩하는 것입니다. – dave

+0

@PatrickEvans 이제는 나를 읽은 후 더 많은 것을 이해하고 있습니다. 그러나 저를 버렸을 때 여전히 코드에있는 부분이 있습니다. 실제 파일 업로드를 유발하는 것이있는 곳은 어디에도 없습니다! 업로드를 트리거하는 다른 명백한 이벤트가 없기 때문에 그 일을하는 것처럼 보입니다. 정보를 주셔서 감사합니다. – JasonDavis

답변

1

내 생각에 실제로 unbind()은 change 이벤트에 대한 이벤트 처리기를 제거하고 있습니다. .unbind()에 대한 jQuery 문서를 보면 모호한 부분이없는 것으로 보입니다. 그렇다면 코드는 무엇을 할 것입니까?

내 생각 엔 이전에 변경 이벤트가 추가되어 제거하려고합니다. $file.unbind('change').ajaxfileupload(....)의 논리는 나에게 말합니다 ... 먼저 $file이 참조하는 jQuery 객체에서 change 이벤트에 대한 이벤트 핸들러를 제거한 다음 ajaxfileupload이라는 위젯을 실행합니다.

관련 문제