2012-06-22 43 views
2

我有一個表單將購物車數據提交到支付網關(WorldPay)付款處理頁面。自定義決定繼續付款之前但在表單提交之前,我需要執行一些額外的邏輯。基本上,我只想在最後一刻爲訂單生成一個唯一的參考。如何重置表單提交事件的event.preventDefault()?

這裏是提交事件jQuery代碼:

$(function(){ 

    $('#checkout-form').submit(function(e){ 

     var $form = $(this); 

     var $cartIdField = $('#cartId'); 

     console.log($cartIdField.val()); 

     if($cartIdField.val() == ''){ 

      e.preventDefault(); 

      $.ajax({ 
       url: baseUrl + '/shop/ajax/retrieve-shopping-cart-reference/', 
       data: {}, type: 'post', dataType: 'json', 
       success: function(json){ 
        if(json.error == 0){ 
         $('#cartId').val(json.data.cart_reference_number); 
         $form.submit(); 
        }else{ 
         alert(json.message); 
        } 
       } 
      }); 
     }else{ 
      console.log('Submitting form...'); //Does not submit! 
     } 
    }); 

}); 

的問題是,在第二次提交success:子句中引發的,形式沒有提交仍在。我假設event.preventDefault()持續超出目前的狀況。

我該如何解決這個問題?

+0

什麼是輸出從'console.log($ cartIdField.val());'在第二次提交? –

+0

http://stackoverflow.com/questions/1164132/how-to-reenable-event-preventdefault/1168022#1168022 ?? '.trigger('submit')'可能有幫助, –

+0

@Tats_innit這就是這段代碼似乎已經在做的事情,但仍然不起作用 - 我不認爲問題實際上是用'e.preventDefault()' 。 –

回答

-1

只有調用e.preventDefault()的時候,你真的需要:

if(not_finished_yet) { 
    e.preventDefault(); 
} 
+0

你看過代碼嗎? 'e.preventDefault()'已經在一個條件之內,然後當AJAX請求返回一個成功的響應時再次提交表單。 –

+0

你是對的,我沒有注意到'$ cartIdField'和$('#cartId')'是一樣的。 – Thomas

1

對於performe表之前,任何操作提交我用下面的menthod希望它西港島線幫助

$('#checkout-form').live("submit",function(event){ 

    //handle Ajax request use variable response 
     var err =false; 

     var $form = $(this); 
     //alert($form); 
     var values = {}; 
     $.each($form.serializeArray(), function(i, field) { 
      values[field.name] = field.value; 
     }); 
    //here you get all the value access by its name [eg values.src_lname] 
     var $cartIdField = $('#cartId'); 

     console.log($cartIdField.val()); 

     if($cartIdField.val() == ''){ 
      $.ajax({ 

        // your code and condition if condition satisfy the return true 
        // else return false 
        // it submit your form 
        /*if(condition true) 
         { 
         var err =true; 
         } 
        else 
         { 
         var err = false; 
         }*/ 

       }) 
     } 
     else 
     { 
      return true; 
     } 
     if(err) 
    { 
    return false 
    } 
else 
{ 
    return true; 

} 
    }) 
+0

ajax成功函數內部的返回不會影響表單是否被提交 – Thomas

+0

這將如何幫助? –

+0

@Thomas我編輯了我的答案來處理ajax請求 –