2012-01-16 6 views
0

私は以下のコードに問題があります。私は提出時に警告をポップアップすることができません。私が働かせる唯一の方法は、$ .getの外に別の警告を挿入することでした。 (あなたはそれを下に見ることができます)。私は私が得るかもしれないどんな助けやガイドラインにも感謝以上のものになるでしょう。

$('#addEvent').submit(function() { 
    var date = $('#day').val(); 
    var startTime = $('#startTime').val(); 

    $.get("/cal/check-For-Existing-Events/time/"+date+"%20"+startTime+":00/room/1234", function(data) { 
     if(data == "Error: date") { 
      alert('Error: This date has expired.'); 
      return false; 
     } 
     else if(data == "Error: existing") { 
      alert('Error: You already have a reservation made on this day.') 
      return false; 
     } 
     else { 
      return true; 
     } 
    }); 
     alert('test'); //If I remove this part, above errors don't work. WTH!? 
}); 
+5

あなたの '$ .get'コールバックの' return'ステートメントは、彼らがやっていると思っていることをしていません - 単純に '$ .get'コールバック関数から戻ってきただけで、サブミットハンドラから戻ってきません。このフォームは、最後の警告を追加する場合を除いて、常に提出される可能性が高くなります。これは、 '$ .get'を実行するのに十分な時間を遅延させます。 –

+0

[フォームを送信する前にajaxの検証が完了するのを待つ方法](http://stackoverflow.com/questions/866654/how-to-wait-for-ajax-validation-to-complete-before- –

答えて

0

をご提案ありがとうございました、私はそれらのすべてを試みたが、それらのどれも動作するように見えない、私は私が得た情報の一部を使用して、ゼロからスタートすることを決めた理由です。以前の回答から

以下は、動作するコードです。+私も追加する必要があります。投稿ボタンを削除する必要がありましたフォームから外して別のコードを作成してください。コードが機能します。なぜ私は本当に知りません、誰でもこれについての情報があれば教えてください。 :)

$("#submit").click(function() { 
    var timeStamp = $("#day").val()+" "+$("#startTime").val(); 
    var room = $room ?> 
    $.post("/cal/check-For-Existing-Events/time/"+timeStamp+"/room/"+room, function(data) { 
     if(data == "Error: date") { 
      $("#errorDisplay").html("Select future date.") 
      $("#errorDisplay").show(); 
      return false; 
     } 
     if(data == "Error: exists") { 
      $("#errorDisplay").html("You already have a reservation.") 
      $("#errorDisplay").show(); 
      return false; 
     }else { 
      $("#addEvent").submit(); 
     } 
    }); 
    return false; 
}); 

私はこの回答が誰にとっても役立つことを願っています。乾杯! :)

1
var ready = false; 
$('#addEvent').submit(function() { 
    if (!ready) { 
     var date = $('#day').val(); 
     var startTime = $('#startTime').val(); 

     $.get("/cal/check-For-Existing-Events/time/" + date + "%20" + startTime + ":00/room/1234", function(data) { 
      if(data == "Error: date") { 
       alert('Error: This date has expired.'); 
      } else if (data == "Error: existing") { 
       alert('Error: You already have a reservation made on this day.'); 
      } else { 
       ready = true; 
       $('#addEvent').submit(); 
      } 
     }); 
     return false; 
    } 
}); 
+0

これは私にとって実行可能な答えのように見えます。 @RobHruskaはありません。フォームの準備が整っているかどうかを判断するためにbooleanフラグ変数を使用しているため、最初のループはfalseなので、ajax呼び出しが行われるためです。 '.get'リクエストがエラーを返さない場合、フラグはtrueに設定され、サブミットハンドラが再び呼び出されます。 –

+0

なぜajaxの実行中にフォームの送信ボタンを無効にする必要があるのですか? Ajaxが返され、エラーがない場合は、送信ボタンを有効にするか、jsを使用してフォームを送信してください。 –

0

だけのparam "E" を追加し、e.preventDefault();

$( '#のaddEvent')機能(E(提出){ e.preventDefault();。 VAR日= $( '#の日')のval();。 VARのstartTime = $( '# startTime ')のval();。

$.get("/cal/check-For-Existing-Events/time/"+date+"%20"+startTime+":00/room/1234", function(data) { 
     if(data == "Error: date") { 
      alert('Error: This date has expired.'); 
      return false; 
     } 
     else if(data == "Error: existing") { 
      alert('Error: You already have a reservation made on this day.') 
      return false; 
     } 
     else { 
      return true; 
     } 
    }); 
     alert('test'); //If I remove this part, above errors don't work. WTH!? 
}); 
関連する問題