2010-03-25 5 views
0

jQuery로 양식에 submit 함수를 설정하고 나중에 함수를 다른 것으로 다시 설정합니다. 원래 함수가 다시 호출 된 다음 새 함수 만 호출되었을 때 새 함수가 호출됩니다.양식 제출 기능을 동적으로 변경하면 이전 함수가 한 번 호출 된 후 새 함수가 호출됩니다.

나는 AJAX로 요청을 보내고 있습니다. 첫 번째 것은 서버의 값을 확인한 다음 계속할 것인지 묻습니다. 제출을 다시 클릭하면 변경된 함수 만 호출해야하지만 어떤 이유로 든 단일 클릭으로 동시에 호출됩니다.

여기 무슨 일입니까? jQuery가 양식 제출의 두 번째 기능 설정을 지연시킬 수 있습니까?

편집 : 다음은 처리기를 변경하는 메소드입니다.

_confirmationCB: function(json, status) { 
    this._setMessage(json['message']); 

    if(json['valid']) { 
    $('form#form').unbind('submit', this._confirmationRequest); 
    $('form#form').submit(this._deleteRequest.bindObject(this)); 
    } 
}, 

_deleteCB: function(json, status) { 
    this._setMessage(json["message"]); 

    if(json['valid']) { 
    this._setMessage(json["message"]); 
    $('td input[type=checkbox]').each(function() { 
     if(this.checked) { 
     $(this).parent().parent().remove(); 
     } 
    }); 
    } 

    $('form#form').unbind('submit', this._deleteRequest); 
    $('form#form').submit(this._confirmationRequest.bindObject(this)); 
    this._setMessage(true); 
}, 

클래스가 다소 길어서 여기에 모든 코드가 표시되지 않습니다.

편집 : 처리기의 바인딩을 해제하려고 시도했지만 문제가 발생하지 않았습니다.

Function.prototype.bindObject = function(object) { 
    var method = this; 
    return function() { 
    method.apply(object, arguments); 
    }; 
} 

이 나는 ​​데 문제 정말 관련이없는,하지만 누군가가 그것을 질문 :

이것은 bindObject 기능입니다. jQuery $ .ajax에 의해 호출 될 때 클래스 'this'객체를 메소드에 바인딩하는 데 사용됩니다.

+1

아마도 코드를 표시해야 할 것입니다. –

답변

2

새 처리기를 바인딩하기 전에 이전 처리기를 언 바운드 했습니까? 몇 가지 코드를 공유 할 수 있습니까?

편집 : 사실 bindObject 함수는 이와 관련이 있습니다. bindObject 함수는 익명의 함수 핸들러를 반환하지만 바인딩을 해제하는 것은 concrete 핸들러입니다. _deleteRequest와 같은 함수 이름 등. 이것은 작동하지 않습니다. 바인딩 및 바인딩 해제는 동일한 핸들러가 바인딩되고 제거되는 경우에만 작동합니다. 그래서 아마도 bind 객체의 리턴 값을 어떤 var에 저장해야합니다. & 그런 다음 var를 사용하여 바인드 & 바인딩 해제를 호출하십시오.

+0

bindObject 함수는 무엇을합니까? 함수 핸들러를 반환합니까? 일반적으로 등록 된 이벤트 핸들러를 바인딩 해제하려면 .unbind jQuery 형식을 사용하십시오. – Satyajit

+0

JavaScript는 객체 메소드가 원래 바인딩 된 상태를 유지하지 않으므로 $ .ajax가 호출 할 때 클래스의 'this'객체를 메소드에 바인딩해야합니다. 위 코드에 함수를 추가 할 것이다. – cnobile

+0

당신은이 돈으로 당신이 옳았다 고 생각합니다. 클래스 var에 두 개의 핸들러를 저장하고 클래스 var의 값을 바인드 해제하고 바인드했습니다. 이제는 제대로 작동합니다. 감사 – cnobile

관련 문제