2012-11-23 53 views
0

此代碼有什麼問題?表單提交和recaptcha

$(function() { 
      $('#my_form').submit(function(e) { 
       e.preventDefault(); 
       recaptcha_response_field = $('input#recaptcha_response_field').val(); 
       recaptcha_challenge_field = $('input#recaptcha_challenge_field').val(); 

       $.post('controller.php', {recaptcha_response_field : recaptcha_response_field, recaptcha_challenge_field : recaptcha_challenge_field}, function(data) { 
       if(data == 0) { 
        alert('no'); 
       } else { 
        alert('submit') 
        $('#my_form').submit(); 
       } 
      }); 
      }) 
     }); 

我在表單中使用了recaptcha。當用戶輸入正確的圖形驗證碼這行代碼被執行

alert('submit') 
$('#my_form').submit(); 

這麼胖這麼好。問題是表單沒有提交。我認爲這行代碼再次執行

$('#my_form').submit(function(e) { 

有什麼建議嗎?

+0

使用全局標誌(布爾VAR),以表明您是否可以提交表單提交或不。 – Archer

+1

if(data == 0){ return false; } else { return true; } – anderssonola

+0

@soderslatt這可能會起作用,但如果我沒有弄錯,最好在大多數情況下使用'preventDefault()':http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return- false –

回答

0

我還沒有測試過,但試試這個。你是對的,.submit函數被再次觸發。

$(function() { 
    $('#my_form').submit(function(e) { 
     'use strict'; 

     var recaptcha_response_field = $('input#recaptcha_response_field').val(), 
      recaptcha_challenge_field = $('input#recaptcha_challenge_field').val(), 
      submitForm = true; 

     $.post('controller.php', { 
       recaptcha_response_field : recaptcha_response_field, 
       recaptcha_challenge_field : recaptcha_challenge_field 
      }, function(data) { 
       if(data == 0) { 
        submitForm = false; 
       } 
     }); 

     if(!submitForm) { 
      e.preventDefault(); 
     } 
    }) 
}); 
+1

這不會按預期工作。您正在嘗試在異步AJAX回調中調用「e.preventDefault()」。表單將在發生之前執行其默認提交事件。 –

+1

@MattStone固定...我想。 –

1

可以使用

$('#my_form').unbind('submit'); 

所有verfication後解除綁定然後經常使用

$('#my_form').submit();