2018 년 업데이트 : 나는이 오래된 대답에 대한 몇 가지 요점을 얻었으며 최선의 해결책은 중복 제출이 무해하도록 작업을 dem 등원으로 만드는 것입니다.
예를 들어, 양식이 주문을 작성하는 경우 양식에 고유 ID를 입력하십시오. 서버가 해당 ID의 주문 생성 요청을 처음 볼 때이를 생성하고 "성공"으로 응답해야합니다. 후속 제출은 "성공"(클라이언트가 첫 번째 응답을받지 못한 경우)으로 응답해야하지만 아무것도 변경하지 않아야합니다.
경쟁 조건을 방지하기 위해 데이터베이스에서 고유성 검사를 통해 중복을 감지해야합니다.
나는 당신의 문제가 다음 줄이라고 생각합니다.
$('input').attr('disabled','disabled');
데이터를 제출 해야하는 데이터를 포함하여 모든 입력을 비활성화합니다.
비활성화 바로 전송 버튼 (들)에, 당신은 수있는 이 작업을 수행 :
$('button[type=submit], input[type=submit]').prop('disabled',true);
그러나 단추가 비활성화되어 있으면 IE가 양식을 제출하지 않는다고 생각합니다. 다른 접근법을 제안합니다.
그것을 해결하는 jQuery 플러그인
우리는 다음 코드 로이 문제를 해결했습니다. 여기서 트릭은 jQuery를 사용 data()하여 양식을 이미 제출 된 것으로 표시합니다. 그렇게하면 제출 버튼을 엉망으로 만들 필요가 없으므로 IE를 놀라게합니다.
// jQuery plugin to prevent double submission of forms
jQuery.fn.preventDoubleSubmission = function() {
$(this).on('submit',function(e){
var $form = $(this);
if ($form.data('submitted') === true) {
// Previously submitted - don't submit again
e.preventDefault();
} else {
// Mark it so that the next submit can be ignored
$form.data('submitted', true);
}
});
// Keep chainability
return this;
};
다음과 같이 사용하십시오.
$('form').preventDoubleSubmission();
AJAX 형태가있는 경우 해야 페이지로드 당 여러 번 제출할 수, 당신은 다음과 같이 당신의 선택에서 제외, 그것을 나타내는 그들에게 클래스를 제공 할 수 있습니다 :
$('form:not(.js-allow-double-submission)').preventDoubleSubmission();