2012-03-26 2 views
0

양식을 제출하기 전에 프롬프트를 표시하기 위해이 코드를 작성했습니다. 양식 입력 값이 100보다 크면 사용자에게 대략 처리하는 데 걸리는 시간을 알리는 대화 상자가 표시됩니다. "확인"을 클릭하면 true를 반환하고 양식을 제출해야합니다. 취소를 클릭하면 false를 반환하고 양식을 제출하지 않아야합니다.jQuery JavaScript가 true/false를 제대로 반환하지 않음

양식이이 응답을 기다리지 않고 어쨌든 제출하는 것이 문제입니다. 나는

다음은 코드의 ... 무엇이 잘못되었는지 알아낼 수 없습니다 : 실행을 중지하고 닫을 때까지 기다리지 않고 대화를 표시

$(document).ready(function() { 
    $("form#generate_vouchers").submit(function(){ 
    if($("input#quantity").val() > 100){ 
     var warning = "It will take around " + Math.round(($("input#quantity").val()/23)) + " seconds to generate this batch.<br />Generation will continue even if you leave this page."; 
     //Does around 23 codes per second, nearly all of that time is inserts. 
     $('<div title="Batch information"></div>').html(warning).dialog({ 
      draggable: false, 
      modal: true, 
      minWidth: 350, 
      buttons: { 
       "Cancel" : function() { 
        $(this).dialog("close"); 
        return false; 
       }, 
       "Yes": function() { 
        $("input#submit").hide(300, function(){ 
         $("img#loader").show(300); 
        }); 
        return true; 
       } 
      } 
     }); 
    } 
    else{ 
     $("input#submit").hide(300, function(){ 
      $("img#loader").show(300); 
     }); 
    } 
    }); 
}); 
+0

사용'e.preventDefault()'와'FALSE '조합을 반환 ... – Val

답변

2

. 제출 기능이 계속되고 return truereturn false은 아무 작업도 수행하지 않습니다.

당신이해야 할 일은 (e.PreventDefault을 사용하여) 즉시 제출하는 양식을 중단 한 다음 Yes 콜백에서 다시 양식을 제출하십시오.

$("form#generate_vouchers").submit(function(e){ 
if($("input#quantity").val() > 100){ 
    e.preventDefault(); // stop submit 
    var warning = "It will take around " + Math.round(($("input#quantity").val()/23)) + " seconds to generate this batch.<br />Generation will continue even if you leave this page."; 
    //Does around 23 codes per second, nearly all of that time is inserts. 
    $('<div title="Batch information"></div>').html(warning).dialog({ 
     draggable: false, 
     modal: true, 
     minWidth: 350, 
     buttons: { 
      "Cancel" : function() { 
       $(this).dialog("close"); 
      }, 
      "Yes": function() { 
       $("form#generate_vouchers")[0].submit(); // submit form manually 
       $("input#submit").hide(300, function(){ 
        $("img#loader").show(300); 
       }); 
      } 
     } 
    }); 
} 
else{ 
    $("input#submit").hide(300, function(){ 
     $("img#loader").show(300); 
    }); 
} 
}); 

예 - http://jsfiddle.net/infernalbadger/ajRr7/

+0

안녕, 응답에 대한 감사합니다. 귀하의 코드는 대화 상자를 트리거하지 않으며 "예"를 클릭했을 때 양식을 제출하지 않는다는 점을 제외하고는 완벽하게 작동하는 수정 버전으로 코드를 수정했습니다. Uncaught TypeError : 객체 # 의 'submit'속성이 함수가 아닙니다. 그것이 무엇인지 알 수 있습니까? 감사. –

+0

m90, 나는 당신이 무엇을 의미하는지 모르겠다. [0]은 나에 의해 추가되지 않았고, 그것 없이는 같은 오류를 준다. 정교하게 주시겠습니까? 감사. –

+0

왜 너희들이 실수를하고 있는지 모르겠다. 내 jsfiddle 예제 크롬, 파이어 폭스와 IE에서 나를 위해 작동합니다. [0]은 폼에 대한 dom 요소를 가져오고 그에 대한 submit을 호출합니다. jquery 이벤트 [참고] (https://developer.mozilla.org/en/DOM/form.submit)를 우회합니다. 또한 모든 브라우저에서 대화를 보여줍니다. –

관련 문제