2011-08-01 9 views
1

こんにちは私は、フォームのタイトルが既にデータベースに存在するかどうかを確認しようとしています。

マイコードは$ .postを実行してデータを取得しますが、e.preventDefault()で停止することはありません。またはfalseを返します。 e.preventDefault();タイトルが空のときに機能します。

$(document).ready(function() { 
     $('input[id$=btnSubmit]').click(function(e) { 
       var title = $("#title").val(); 
       if (!title) { 
        alert('Please Add a title'); 
        return false ; 
        e.preventDefault(); 
       } else { 
        $.post("http://xendesktop.nl/uploader/checktitle.php",{ title:$(this).val() } ,function(data) { 
         if(data=='exists') { 
          alert('This title already exists'); 
          e.preventDefault(); 
         } 
        }); 
       } 
       var description = $("#description").val(); 
       if (!description) { 
        alert('Please Add a description'); 
        return false ; 
        e.preventDefault(); 
       } 

答えて

0

return false;は、バブルを防止し、デフォルトを防止するのと同じです。

どちらも、AJAXコールバックに入れないでください。その関数は、クリックコールバックの外で呼び出されます。

1

$.post要求は非同期的に発生するため、サーバーが応答を返すまで(その時点では発生しない)、ボタンのデフォルトのアクションは阻止されません。ハンドラが実行され、フォームが送信されます。

+0

これをどうすれば防ぐことができますか? – xendesktop

+0

ハンドラの先頭でpreventDefaultを実行し、実行に成功したときにのみ、例えば '$(this).closest(" form ")。submit()を手動でトリガします。それには少しのリファクタリングが必要ですが、短くて簡潔な解決策に終わるでしょう。 – karim79

関連する問題