2013-02-14 6 views
4

J'ai un formulaire que je cesse de soumettre avec e.preventDefault(). (J'ai aussi essayé de retourner faux).Envoi du formulaire après avoir utilisé e.preventDefault();

Je dirais manuellement le formulaire pour soumettre après un court délai, en utilisant le code:

$('form').delay(2000).submit(); 

Malheureusement, e.preventDefault() semble désactiver la forme de soumettre même si elle explicitement soumise en utilisant le submit() fonction.

Une idée de comment je peux combiner ces intentions? Je voudrais montrer un écran de chargement pour quelques secondes.

Merci!

+2

Je pense que 'retard()' est utilisé uniquement pour les effets, et non des événements. – sevaor

Répondre

2
$("form").on('submit.blocker', function (e) { 
    setTimeout(function() { 
     $("form").off('submit.blocker').trigger('submit'); 
    }, 2000); 
    e.preventDefault(); 
}); 
+0

Hmmm .. Ne fonctionne toujours pas pour moi (en utilisant Chrome, si cela est important). Même avec l'implémentation la plus basique, elle ne se soumet que si je clique deux fois sur le bouton (parce que 'off ('submit')' détache le gestionnaire d'origine). Des idées pourquoi? –

+0

@ChrisNolet a mis à jour ma réponse avec une solution possible: espace de noms les noms des gestionnaires d'événements afin que seul celui-ci soit non lié –

+0

Etrange ... Ok, cela ne fonctionne toujours pas. Mais de façon intéressante, même l'implémentation la plus basique de: '$ ('# myform'). Submit();' ne fonctionne pas, cependant '$ ('. Submit'). Click()' fait! Donc, le problème est là, plutôt que le code e.preventDefault(). Je ne sais pas pourquoi cela se passe bien. –

1
$('form').on('submit', function(e) { 
    if (!e.isTrigger) { 
     setTimeout(function() { 
      $("form").trigger('submit'); 
     }, 2000); 
     e.preventDefault(); 
    } 
}); 
2

essayer.

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     var okToSubmit = false; 
     $('form').submit(function (e) 
     { 
      if (! okToSubmit) 
      { 
       e.preventDefault(); 

       var $form = $(this); 
       setTimeout(function() 
       { 
        okToSubmit = true; 
        $form.submit(); 
       }, 2000); 
      } 
     }); 
    }); 
</script> 
<form action="somewhere"> 
    <input type="text" name="something" /> 
    <input type="submit" /> 
</form>

Le code ci-dessus est testé.

0

vous pouvez essayer cela fonctionne pour moi:

<form name="demo" action="111" onSubmit="fun();return false"> 
<input type="text" name="name1" /> 
<input type="submit" /> 
</form> 

et dans le javascript

fun() 
{ 
var x= document.forms["demo"]; 
setTimeout(x.submit(),2000);//time in milliseconds 
} 
Questions connexes