2016-07-16 4 views
0

이전 시스템을 해결하고 일부 조건에서 제출 단추를 납치하고 처리기를 적용한 다음 처리가 끝나면이 처리기를 바인딩 해제하려고합니다. bindunbind을 사용하고 있지만 문제의 양식을 시작할 때마다 누적 적으로 이벤트가 연결됩니다. jQuery 핸들러에서 이벤트 바인딩 해제

class MyForm(){ 
    constructor(){ 
     // button in question 
     this.$submit = $('#submit'); 

     this.$submit.bind('click', this.submit.bind(this)); 
     return this; 
    } 

    submit(){ 
     return this.doAjaxStuff(); 
    } 

    doAjaxStuff(){ 
     var self = this; 
     return $.post(file, data).always(function(){ 
       self.$submit.unbind('click', self.submit); 
     }); 
    } 
} 

불행하게도 때마다 나는 새로운 MyForm 이벤트가 다시하지만 결코 언 바운드 바인딩 만듭니다.

답변

1

간단한 수정은 먼저 off()을 사용하고 이벤트의 네임 스페이스입니다. 이름 공간에서 이벤트를 제거하면 ... bind()unbind()이되지 않습니다 같은 이벤트의 다른 청취자

this.$submit.off('click.special').on('click.special', this.submit.bind(this)); 

주를 방해하는 대신 on()off(0를 사용하지 않습니다.

더 좋은 방법은 페이지로드에 한번 위임하고

+0

내가 특별히 단지 내가'(this.submit)'정의 된 핸들러를 호출 할 off'에'필요 같은 클래스를 계속 전화하지 않을 것입니다. 나는 시간에 민감한 프로젝트에서 나쁜 코드를 다루고 있는데, 이것이 내가 생각할 수있는 유일한 해결책이다. 나는 그것이 작동 할 수 있다는 것을 알고, 나는 왜 내 방법이 효과가 없는지 모르겠다. – BarryBones41

+0

또한 네임 스페이스 이벤트도 할 수 있지만, 페이지로드시에만 한 번만 위임하게됩니다. – charlietfl

+0

'this. $ submit.off ('click.special '). on ('click.special ', this.submit.bind (this)); ' – charlietfl

관련 문제