2011-09-20 5 views
2

다음 코드를 사용하여 단추 대신 링크가있는 양식을 제출하는 데 사용합니다. 이것은 우리가 CSS 호버 (hover)를 그들과 함께 할 수 있도록하기 위해서입니다.Jquery - 양식을 두 번 제출하는 Internet Explorer

$('a.css_submit').click(submit_form); 
$('a.inactive_submit').click(submit_form); 

function submit_form(event) { 
    if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit')) { 
     $(this).toggleClass("css_submit inactive_submit"); 
    $(this).parents('form:first').submit(); 
    return false; 
    } else { 
    return true; 
    } 
} 

문제는 Internet Explorer에서 양식을 두 번 제출하는 것입니다. 문제를 직접 복제 할 수는 없지만 프로덕션 서버 로그에서 확인할 수 있습니다. 이 문제는 IE6 - IE9에서 계속됩니다. 다른 모든 브라우저는 정상적으로 작동합니다. 링크에서 거짓을 반환한다고 말하는 게시물을 보았지만 그 일을하고 있습니다.

도움을 주시면 감사하겠습니다.

+2

아마 사용자가 두 번 빠르게 제출을 클릭하고 있습니다. 첫 번째 클릭 후 링크를 ​​비활성화하십시오. –

+0

event.preventDefault()를 submit_form의 첫 번째 줄로 사용하면 똑같은 작업을 수행합니까? (대신 false를 반환합니다.) –

+0

+1 @ilia 이것은 대개의 경우입니다. 일반 인구는 Windows 아이콘을 두 번 클릭하는 데 사용되므로 _everything_을 두 번 클릭하는 경향이 있습니다. 몇 년 전에 온라인 결제 시스템을 작성했고 두 번 제출을 막기 위해 제출 버튼 onclick (서버 측 유효성 검사 외에)을 사용 중지했습니다. –

답변

0

당신은 두 번 클릭되지 않습니다 확인하기 위해 몇 가지 추가 검증을 추가 할 수 있습니다

var formSubmitted = false; 

function submit_form(event) { 
    if(formSubmitted == true) { alert('Form already submitted.'); return false; } // determine if form is already submitted 
    if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit')) { 
     $(this).toggleClass("css_submit inactive_submit"); 
    $(this).parents('form:first').submit(); 
    return false; 
    } else { 
    formSubmitted = true; 
    $('a.css_submit').attr('disabled', true); // disable form submit button 
    $('a.css_submit').val('Processing...'); // set form submit button text to say processing 
    return true; 
    } 
} 
1

당신이 submit 자신이 당신이 필요로하는 형태는 이벤트의 기본 처리를 취소합니다.

JQuery와 방법은 event.preventDefault()입니다 : true/false 반환

$(this).parents('form:first').submit(); 
event.preventDefault(); 

JQuery와에 영향을주지 않습니다.

관련 문제