2010-10-08 11 views
8

Ich möchte nur einige Client-Seite (JQuery Javascript) Validierung in einem Web-Benutzer-Steuerelement hinzufügen. Ich legte einen OnClientClick-Handler und die Funktion wird aufgerufen. ABER, selbst wenn ich "false" zurückgebe, wird die OnClick-Methode immer ausgelöst. Was mache ich falsch ?ASP.NET OnClientClick = "return false;" funktioniert nicht

Ich bin mit VS 2010, Targeting der 4.0-Framework mit JQuery 1.4.2. und JQuery UI 1.8.4.

Hier ist ein Beispielcode:

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

Script-Methode:

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

}

Wenn ich einen Haltepunkt in dem Ereignis Page Load setzen, ich sehe, dass ich in und die btnAddSave_Click bekommen Ereignis wird ebenfalls ausgeführt.

+0

Haben Sie versucht, ohne die Alert-Box? Ich habe kürzlich einen anderen Beitrag wie diesen gelesen –

+0

Ich habe dies mit ASP.NET 4 getestet und das erwartete Verhalten erhalten. –

+3

Überprüfen Sie, ob JavaScript-Fehler die Rückgabe von false verhindern – Aristos

Antwort

3

Versuchen Sie es zu

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

Danke für die Antwort, es funktioniert - aber das macht keinen Sinn! 3 Monate zuvor hatte ich dieses Problem mit Firefox behoben (vor der letzten Veröffentlichung) und es funktionierte mit "return ValidateMail();". –

+1

@ alonso.torres Ich verstehe das nicht. Gibt das nicht einfach "immer" zurück, d. H. Selbst wenn das Formular die Validierung besteht, wird es jetzt als ungültig zurückgegeben, unabhängig davon, dass OnClick niemals ausgelöst wird. – rism

8

aus irgendeinem Grund, obwohl ich keine jquery Event-Handler angebracht hatte, es hat nicht funktioniert.

Was war eigentlich gearbeitet:

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

vielen dank .. hat meinen tag gerettet! Selbst ich hatte so ein Problem! –

3

Große Antworten. Ich mache es so. Selbes Ergebnis - das OnClick-Ereignis wird nicht abgefeuert, wenn von der Java-Funktion false zurückgegeben wird.

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

Ich schreibe diese Antwort nur, weil ich html Buttons mit ASP.NET WebForms bin und ich konnte nicht Lösung finden, warum sollte ich mein Stück Code mit Arbeitsbeispielen ersetzen. Hier ist die Lösung, warum es nicht funktioniert. Ich hoffe, es wird Ihnen helfen, das Problem zu verstehen, als ob es mir geholfen hat. Dies ist mein erster Beitrag, also Entschuldigung für Stil.

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

Und Javascript-Funktion:

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

Mit Client-Seite, klicken Sie nach dem korrekten Validierung nicht Ereignis auf Server-Seite Auslösung wurde, die Taste binded wurde. Lösung erwähnt, um das Stück Code zu ändern:

onclick = "wenn (! MyValidation()) zurückgeben;"

Funktioniert wegen der Art und Weise, dass HTML auf Seite mit Onserverclick gerendert wird erstellt. Onserverclick auf HTML-Button wird durch __doPostBack-Methode von Javascript ersetzt. Der Fullcode der html-Schaltfläche, die auf der Client-Seite gerendert wird, sieht folgendermaßen aus:

Und nach dem Ersetzen mit if Statment.

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

Arbeiten mit Rückgabe myValidate(); Event wird nicht tirgger, weil es vor __doPostBack zurückkehrt.

Der folgende Code ermöglicht es Ihnen, falls nötig, einen weiteren Code zur Schaltfläche hinzuzufügen, der keine Probleme verursacht.

0

Fügen Sie einfach javascript:

Beispiel:

javascript:return ValidateMail(); 
+1

Willkommen bei Stack Overflow! Stapelüberlauf [erfordert, dass alle Beiträge in Englisch sind] (https://stackoverflow.blog/2009/07/non-english-question-policy/). Ich habe den nicht-englischen Teil Ihres Posts entfernt, um dieser Regel zu entsprechen. Sie können auch eine dieser sprachspezifischen Stack Overflow-Communities verwenden, die Nicht-Englisch zulassen: [Spanisch] (http://es.stackoverflow.com), [Japanisch] (http://ja.stackoverflow.com), [Russisch ] (http://ru.stackoverflow.com), [Portugiesisch] (http://pt.stackoverflow.com). – FelixSFD