2010-11-19 4 views
82

Je travaille sur une application web ASP.net.Comment annuler une soumission de formulaire dans l'événement onclick du bouton submit?

J'ai un formulaire avec un bouton de soumission. Le code du bouton de soumission ressemble à <input type='submit' value='submit request' onclick='btnClick();'>.

Je veux écrire quelque chose comme ce qui suit:

function btnClick() { 
    if (!validData()) 
     cancelFormSubmission(); 
} 

Comment puis-je faire?

+0

ouch, cela me fait mal à la tête. J'ai plusieurs entrées 'submit' différentes. Je pense que je vais essayer d'utiliser les contrôles côté serveur sur cette page. –

+1

duplicata possible de [Comment empêcher le formulaire d'être soumis?] (Http://stackoverflow.com/questions/3350247/how-to-prevent-form-from-being-submitted) –

Répondre

146

Vous êtes mieux faire ...

<form onsubmit="return isValidForm()" /> 

Si isValidForm() retours false, votre formulaire ne présente pas.

Vous devriez également déplacer votre gestionnaire d'événements de inline.

document.getElementById('my-form').onsubmit = function() { 
    return isValidForm(); 
}; 
+0

Nice, mais il semble que je ne peux pas obtenir 'onsubmit' pour travailler quand j'utilise ASP.net car asp.net enveloppe tout dans sa propre forme ... –

+5

Vous pouvez utiliser sa deuxième suggestion. Inline javascript est le diable de toute façon. – Stephen

+3

Si vous utilisez ASP.Formulaires Web NET (indice: ne pas), n'essayez pas d'inclure d'autres formulaires. Ils sont simplement incompatibles. J'entends ASP.NET MVC vous permet de créer des applications Web en utilisant le balisage idiomatique. – Quentin

0

utilisation onclick='return btnClick();'

et

function btnClick() { 
    return validData(); 
} 
+2

Si vous appuyez sur Entrée, le contrôle sera ignoré. Utilisez onSubmit – Cfreak

0
function btnClick() { 
    return validData(); 
} 
+1

Il est nécessaire de faire plus que cela pour le faire fonctionner. J'ai essayé de rendre le retour de functino vrai ou faux et cela ne semble pas faire de différence. –

+1

Sa réponse est correcte. Upvoted. Vous devez également le retourner dans la balise d'entrée – Cfreak

+1

En outre, je préfère utiliser 'ev.preventDefault()' ou 'ev.returnValue = false' pour annuler le comportement par défaut, mais pas pour empêcher les bulles d'événements, au cas où d'autres contrôles observeraient le même événement sur le même élément. Utilisez 'return false' uniquement lorsque vous voulez arrêter l'événement ** et ** annuler l'action par défaut. Voir [cet article] (http://javascript.about.com/library/bldom21.htm). –

11

Vous devez changer

onclick='btnClick();' 

à

onclick='return btnClick();' 

et

cancelFormSubmission(); 

à

return false; 

Cela dit, je vais essayer d'éviter l'événement intrinsèque attribue en faveur de unobtrusive JS avec une bibliothèque (comme YUI ou jQuery) qui a un bon événement gérer API et attacher à l'événement qui compte vraiment (à savoir l'événement submit du formulaire au lieu de l'événement click du bouton).

+0

L'utilisation de onclick permettra à l'utilisateur d'appuyer sur Entrée et d'ignorer la vérification. – Cfreak

34

Changer votre entrée à ceci:

<input type='submit' value='submit request' onclick='return btnClick();'> 

Et return false dans votre fonction

function btnClick() { 
    if (!validData()) 
     return false; 
} 
1

Pourquoi ne pas changer le bouton soumettre à un bouton régulier, et l'événement de clic, soumettez votre formulaire Si cela réussit vos tests de validation?

par exemple

<input type='button' value='submit request' onclick='btnClick();'> 

function btnClick() { 
    if (validData()) 
     document.myform.submit(); 
} 

+1

Si vous appuyez sur Entrée, le contrôle sera ignoré. Use onSubmit – Cfreak

+0

Ensuite, cela ne fonctionnera pas du tout si JavaScript n'est pas disponible. Build on things that work. – Quentin

0

Vous avez besoin onSubmit. Pas onClick sinon quelqu'un peut simplement appuyer sur Entrée et il va contourner votre validation. Comme pour l'annulation. vous devez retourner faux. Voici le code:

<form onSubmit="return btnClick()"> 
<input type='submit' value='submit request'> 

function btnClick() { 
    if (!validData()) return false; 
} 

Modifier onSubmit appartient à la balise form.

+0

cela ne fonctionnera pas. Si les données sont valides, vous ne renvoyez pas true. mettre le retour vrai; à la fin de la fonction btnClick() – NickSoft

3

Vous devez return false;:

<input type='submit' value='submit request' onclick='return btnClick();' /> 

function btnClick() { 
    return validData(); 
} 
4

vous devez changer le type de submit à button:

<input type='button' value='submit request'> 

au lieu de

<input type='submit' value='submit request'> 

vous obtenez alors le nom de votre bouton en javascript et associé quelle que soit l'action que vous voulez le

var btn = document.forms["frm_name"].elements["btn_name"]; 
btn.onclick = function(){...}; 

a travaillé pour moi espère que cela aide.

0

C'est simple, il suffit de retourner false;

Le code ci-dessous va dans le onclick du bouton soumettre en utilisant jquery ..

if(conditionsNotmet) 
{ 
return false; 
} 
3

Parfois, onsubmit ne fonctionnerait pas avec asp.net. J'ai résolu le problème de manière très simple.

si nous avons une telle forme

<form method="post" name="setting-form" > 
    <input type="text" id="UserName" name="UserName" value="" 
     placeholder="user name" > 
    <input type="password" id="Password" name="password" value="" placeholder="password" > 
    <div id="remember" class="checkbox"> 
    <label>remember me</label> 
    <asp:CheckBox ID="RememberMe" runat="server" /> 
    </div> 
    <input type="submit" value="login" id="login-btn"/> 
</form> 

Vous pouvez maintenant attraper obtenir cet événement avant que le formulaire postback et l'empêcher de postback et faire tous les ajax vous voulez utiliser ce jquery.

$(document).ready(function() { 
      $("#login-btn").click(function (event) { 
       event.preventDefault(); 
       alert("do what ever you want"); 
      }); 
}); 
Questions connexes