2013-05-09 63 views
0

我有一個由AJAX加載的窗體,並在該窗體內我已呈現reCaptcha控件。 當我發佈表單時,首先驗證,並使用我的web服務驗證驗證碼。如果所有數據都是正確的,我想發佈表單。jQuery不張貼表格後防止默認

但最近的行爲不追加...

我看到這個帖子:

但沒有一個解決方案工作... :(

我的代碼:

$('#myForm').submit(function (e) { 
e.preventDefault(); 

    var captchaInfo = { 
    challengeValue: Recaptcha.get_challenge(), 
    responseValue: Recaptcha.get_response(), 
    }; 

    $.ajax({ 
    type: 'POST', 
    url: '@Url.Action("ValidateCaptcha")', 
    data: JSON.stringify(captchaInfo), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (msg) { 
    if (msg) { 
    $('#myForm').submit(); 
    } 
    else { 
    helpers.setCaptcha("captcha"); 
    } 
    }, 
    error: function (req, status, error) { 
    alert("error: " + error); 
    helpers.setCaptcha("captcha"); 
    }, 
    }); 
}); 

我怎麼解決這個問題?提前

回答

2

當你調用.submit()相同的代碼

由於將調用(可能是一個無限循環結束了)。嘗試重組和傳遞價值的.submit()呼叫,像這樣:

$('#myForm').submit(function (e, passThrough) { // <-- DECLARE HERE!! 
    if (passThrough) { // <-- CHECK HERE!! 
     e.preventDefault(); 

     var captchaInfo = { 
      challengeValue: Recaptcha.get_challenge(), 
      responseValue: Recaptcha.get_response(), 
     }; 

     $.ajax({ 
      type: 'POST', 
      url: '@Url.Action("ValidateCaptcha")', 
      data: JSON.stringify(captchaInfo), 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (msg) { 
       if (msg) { 
        $('#myForm').trigger("submit", [true]); // <-- PASS HERE!! 
       } 
       else { 
        helpers.setCaptcha("captcha"); 
       } 
      }, 
      error: function (req, status, error) { 
       alert("error: " + error); 
       helpers.setCaptcha("captcha"); 
      }, 
     }); 
    } 
}); 

true)傳遞的值,是在處理程序的參數可用。所以請檢查一下。如果它是true,你知道它是手動調用的,不應驗證驗證碼,基本上是通過處理程序並允許默認行爲。

參考:

  • .trigger():​​
+0

你好。我測試了這個代碼,如果用戶在表單中插入了正確的數據並且captcha正確的表單被髮布了。 但是,如果用戶錯過驗證碼,並在下次嘗試插入正確的驗證碼錶格不張貼... 一些消化? 謝謝! – joaoasrosa 2013-05-10 10:08:26

1

嘗試刪除,如果驗證提交處理。

$('#myForm').off('submit'); 
-1

在窗體節點本身上觸發事件。

$('#myForm')[0].submit() 

這將導致它繞過jQuery綁定事件。

+0

downvote?你不明白這段代碼的作用嗎?如果這就是你的想法,它不會造成無限循環。 – 2013-05-10 16:14:36