2010-10-08 17 views
8

Je veux juste ajouter une validation côté client (JQuery Javascript) dans un contrôle utilisateur web. J'ai mis un gestionnaire OnClientClick et la fonction est appelée. MAIS, même si je renvoie "false", la méthode OnClick est toujours activée. Qu'est-ce que je fais mal ?ASP.NET OnClientClick = "return false;" ne fonctionne pas

Je suis avec VS 2010, ciblant le framework 4.0 avec JQuery 1.4.2. et JQuery UI 1.8.4.

Voici un exemple de code:

<td style="text-align:right"><asp:Button ID="btnAddSave" OnClientClick="return ValidateMail();" OnClick="btnAddSave_Click" runat="server" Text="Submit" /></td> 

méthode Script:

function ValidateMail() { 
alert("Bouton clicked"); 
return false; 

}

Si je mets un point d'arrêt dans l'événement Page_Load, je vois que je reçois et le btnAddSave_Click l'événement est également exécuté.

+0

Avez-vous essayé sans la boîte d'alerte? J'ai lu un autre article comme ceci récemment –

+0

J'ai testé ceci avec ASP.NET 4 et obtiens le comportement attendu. –

+3

Rechercher les erreurs javascript qui l'empêchent de retourner false – Aristos

Répondre

3

Essayez de changer à

OnClientClick="ValidateMail(); return false;" 
+0

Merci pour la réponse, cela fonctionne - mais cela n'a aucun sens! 3 mois avant j'avais résolu ce même problème avec Firefox (avant leur dernière version) et cela fonctionnait avec "return ValidateMail();". –

+1

@ alonso.torres Je ne comprends pas cela. Cela ne retourne-t-il pas juste "toujours" faux, c'est-à-dire que même si le formulaire réussit la validation, il reviendra invalide, quel que soit le mode OnClick. – rism

8

pour une raison quelconque, même si je ne l'ai pas eu de gestionnaires d'événements jquery attachés, il ne fonctionne pas.

Ce qui en fait travaillé était:

OnClientClick="if (validate_form() == false) return(false);" 
+0

merci beaucoup .. sauvé ma journée! Même moi j'avais un tel problème! –

3

réponses Grand. Je le fais de cette façon. Même résultat: l'événement OnClick n'est pas déclenché si false est renvoyé par la fonction Java.

OnClientClick = "if (!ValidateDelete()) return false;" 
OnClick="btnDeleteSupplier_Click" 
0

J'écris cette réponse parce que je suis à l'aide des boutons html avec ASP.NET WebForms et je ne pouvais pas trouver la solution pourquoi devrais-je remplacer mon morceau de code avec des exemples de travail. Voici la solution pourquoi cela ne fonctionne pas. J'espère que cela vous aidera à comprendre le problème, comme si cela m'avait aidé. Ceci est mon premier message, donc désolé pour le style.

<button type="button" id="buttonAddOrEdit" class="btn btn-success" runat="server" onclick="return myValidate()" onserverclick="buttonAddOrEdit_ServerClick">Zapisz</button> 

Et la fonction javascript:

function myValidation() { 
     if (validator.form()) { 
      //Project logic 
      return true; 
     } 
     else return false; 
    }; 

Utiliser clic côté client après validation correcte n'a pas été événement déclencheur sur le côté serveur qui a été binded à bouton. Solution mentionnée pour changer le morceau de code:

onclick = "if (! MyValidation()) retourne;"

Fonctionne en raison de la façon dont le rendu html sur la page avec onserverclick est créé. Onserverclick sur le bouton html est remplacé par la méthode __doPostBack de javascript. Le code complet du bouton html rendu sur le côté client ressemble à ceci:

<button onclick="return myValidation(); __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button> Błąd składni 

Et après le remplacer par si statment.

<button onclick="if(!myValidation()) return; __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button> 

Travailler avec return myValidate(); ne sera pas tirgger événement car il retourne avant __doPostBack.

Le code suivant vous permettra d'ajouter un autre code au bouton si nécessaire et ne causera aucun problème.

0

ajouter juste javascript:

Exemple:

javascript:return ValidateMail(); 
+1

Bienvenue dans Stack Overflow! Stack Overflow [nécessite que tous les messages soient en anglais] (https://stackoverflow.blog/2009/07/non-english-question-policy/). J'ai supprimé la partie non anglaise de votre message pour me conformer à cette règle. Vous pouvez également utiliser l'une de ces communautés Stack Overflow spécifiques aux langues qui autorisent les langues autres que l'anglais: [espagnol] (http://es.stackoverflow.com), [japonais] (http://ja.stackoverflow.com), [russe] ] (http://ru.stackoverflow.com), [Portugais] (http://pt.stackoverflow.com). – FelixSFD