2012-03-26 5 views
0

フォームを送信する前にプロンプ​​トを表示するためにこのコードを記述しました。フォーム入力の値が100より大きい場合は、処理にどれくらいの時間がかかるかをユーザーに知らせるダイアログが表示されます。 「OK」をクリックすると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のサンプルは、chrome、firefox、IEで私のために働いています。 [0]はフォームのDOM要素を取得しており、それを呼び出して送信します。 jqueryイベントをバイパスします[参考](https://developer.mozilla.org/ja/DOM/form.submit)。それはまた私のためのすべてのブラウザの対話を示しています。 –