简体   繁体   中英

How to reset event.preventDefault() of a form submit event?

I have a form that submits shopping cart data to a payment gateway (WorldPay) payment processing page. I need to perform a couple of extra logic the moment the custom decides to proceed to the payment but before the form submission itself. Basically, I simply want to generate a unique reference to the order at the very last moment.

Here is the jQuery code for the submit event:

$(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!
        }
   });

});

The problem is that during the second submit triggered within the success: clause, the form isn't submitted still. I am assuming event.preventDefault() persists beyond the current condition.

How can I get around this?

For performe the any operation before form submit i used the following menthod hope it wil help

 $('#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;

}
     })

e.preventDefault() remove default form submit attribute which can not be reverted if applied once.

Use below code instead to prevent a form before submitting. This can be reverted.

$('#formId').attr('onsubmit', 'return false;');

And below code to restore submit attribute.

$('#formId').attr('onsubmit', 'return true;');

Only call e.preventDefault() when you really need to:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM