2010-03-03 8 views
1

나는 이전에 related question에게 물었습니다. 그러나 지금 응답해야하는 질문은 약간의 특정 탄젠트가있는 것 같아서 새로운 질문을하는 것이 더 좋을 것이라고 생각했습니다.jquery .submit return false 항상 작동하지 않음

페이지의 모든 Ajax 호출이 성공적으로 반환 될 때까지 양식 제출을 방지하려고합니다.

나는 이것에 대한 간단한 테스트를했다. (호출이 시작될 때 카운터에 1을 더하고, 성공하면 1을 빼기). 카운터가 0에 도달 할 때까지

// can we submit yet? 
    $('#checkoutform').submit(function() { 
    if (ajaxcallcounter == 0) { 
     return true; 
    } 
    return false; 
    }); 

가 양식 제출을 방지하기 위해 (모든 호출이 완료)하지만 어떤 이유로이 100 % 효과가 보이지 않는다 :

나는 내가 할 수 있어야 보라.

이 붉은 청어하지만 통화가 맥 사파리를 사용하고 완료하기 전에 체크 아웃 관리 한 고객의 모든 보고서

(이것은 단지 비록 우연의 일치 일 수) 경우 나도 몰라 here 코드를 볼 수 있습니다. 배송 국가를 변경하여 일부 ajax 호출을 시작하십시오. 카운터가> 0 인 동안 오른쪽 하단의 제출 버튼을 사용 중지해야합니다.

+0

답변을 찾을 수 없습니다. 나는 당신이 코드 전체에서'ajaxcallcounter'를 점차적으로 증가 시키거나 감소시키고 있다고 말할 것입니다. 대신 증분 및 감소 기능을 호출하는 것이 유용 할 수 있습니다. 그런 다음 몇 가지 쉬운 로깅을 수행하고 언제 호출되는지 확인할 수 있습니다. – user113716

+0

안녕 패트릭, 거기에 많은 증분과 감소 때문에 전화가 많이 있습니다! :) 나는 그들이 정확한 시간에 전화를 받았다고 생각하지만 양식을 제출할 수 있습니다. – Ashley

답변

1

var ajaxcallcounter = 0; 당신의 기능 밖에서. 자바 스크립트 파일의 맨 위에 넣으면 global variable이됩니다.

일반적으로 전달을 중지하여 이벤트를 완벽하게 제어 할 수 있습니다. 각 이벤트 처리기에는 일반적으로 "e"또는 "이벤트"로 정의되는 암시 적 매개 변수가 있으며 이에 대한 preventDefault()를 호출 할 수 있습니다.

$('#checkoutform').submit(function(e) { 
    e.preventDefault(); 
    if (ajaxcallcounter == 0) { 
     return true; 
    } 
    return false; 
    }); 
+0

그는 이미 그렇게하고 있습니다. 전역 적이 지 않지만, 모든 이벤트 핸들러가 정의 된 jQuery "ready"함수에 의해 형성되는 클로저에 있습니다. 또한, 그는 거의 모든 사건에서 항상 "디폴트를 방지"하고 싶지 않습니다. – Pointy

+0

그래, 나는 그것이 현재 정의 된 것들의 범위에 있다는 것을 알고 있지만, 그 스타일은 항상 나에게 두드러기를 준다. 다른 곳에서 함수를 정의하는 것은 너무 쉽습니다 (예 : 다른 js 포함). 왜 제대로 작동하지 않는지 궁금합니다. 질문자가 모든 기본 이벤트 처리를 막으려는 것은 아니며,이 경우에는 행동에 대한 명시 적 제어를 원할 것입니다. – Tom

+0

안녕하세요 톰, Pointy - 나는 더 많은 설명없이 그것을 사용하여 자신감을 느끼기에 충분히 preventDefault를 이해하지 못합니다. Tom이 제공 한 예제에서 false를 반환하는 다른 방식으로 Default 작업을하지 않습니까? 아니면 이것이 '벨트 및 브레이스'방식입니까? – Ashley