web-dev-qa-db-fra.com

ASP.NET OnClientClick = "return false;" ne fonctionne pas

Je souhaite simplement ajouter une validation côté client (Javascript JQuery) dans un contrôle utilisateur Web. Je mets un gestionnaire OnClientClick et la fonction est appelée. MAIS, même si je retourne "false", la méthode OnClick est toujours renvoyée. Qu'est-ce que je fais mal ?

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 de script:

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

}

Si je mets un point d'arrêt dans l'événement Page_Load, je constate que j'entre et que l'événement btnAddSave_Click est également exécuté.

9
Patrice Cote

Avez-vous un gestionnaire d’événements click (enregistré via jquery) qui retourne true? Dans ce cas, la valeur de retour de OnClientClick est ignorée.

Regardez ma question (et réponse): Pourquoi ne pas renvoyer faux de OnClientClick annuler la publication

6
M4N

pour une raison quelconque, bien que je n’aie aucun gestionnaire d’événement jquery attaché, cela ne fonctionnait pas.

Ce qui a réellement fonctionné était:

OnClientClick="if (validate_form() == false) return(false);"
10
Yaron

Grandes réponses. 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"
3
Bill Pepitone

Essayez de le changer en

OnClientClick="ValidateMail(); return false;" 
3
alonso.torres

Il suffit d'ajouter javascript:

Exemple:

javascript:return ValidateMail();
0
pao

J'écris cette réponse uniquement parce que j'utilise des boutons HTML avec ASP.NET WebForms et que je ne trouvais pas de solution, pourquoi remplacer mon élément de code par des exemples concrets. Voici la solution pour laquelle cela ne fonctionne pas. J'espère que cela vous aidera à comprendre le problème et que le vérifier m'a aidé. Ceci est mon premier post, 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 fonction javascript:

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

L'utilisation d'un clic côté client après une validation correcte n'a pas déclenché un événement côté serveur lié au bouton. Solution mentionnée pour modifier un morceau de code en:

onclick = "if (! myValidation ()) return;"

Fonctionne à cause de la façon dont le rendu HTML sur la page avec onserverclick est créé. Le bouton Onserverclick on html est remplacé par la méthode __doPostBack de javascript. Le code complet du bouton html rendu côté client a l'aspect suivant:

<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 avoir remplacé avec si déclaration.

<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 tirera pas d’é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
LukaszBalazy