2010-10-08 9 views
8

Voglio solo aggiungere una validazione lato client (JQuery Javascript) in un controllo utente web. Metto un gestore di OnClientClick e la funzione viene chiamata. MA, anche se restituisco "false", il metodo OnClick viene sempre attivato. Che cosa sto facendo di sbagliato ?ASP.NET OnClientClick = "return false;" non funziona

Sono con VS 2010, il targeting del framework 4.0 con JQuery 1.4.2. e JQuery UI 1.8.4.

Ecco un esempio di codice: il metodo

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

Script:

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

}

Se metto un punto di interruzione nell'evento Page_Load, vedo che ho dentro e la btnAddSave_Click anche l'evento viene eseguito.

+0

Hai provato senza la finestra di avviso? Ho letto un altro post come questo di recente –

+0

Ho provato questo con ASP.NET 4 e ottenere il comportamento previsto. –

+3

Verificare la presenza di errori javascript che impediscono il ritorno false – Aristos

risposta

3

Provare a cambiare a

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

Grazie per la risposta, funziona - ma questo non ha senso! 3 mesi prima avevo risolto lo stesso problema con Firefox (prima della loro ultima versione) e funzionava con "return ValidateMail();". –

+1

@ alonso.torres Non lo capisco. Questo non restituisce semplicemente "sempre" falso, anche se il modulo supera la convalida, esso verrà restituito come non valido, quindi OnClick non verrà mai attivato? – rism

8

per qualche ragione, anche se non ho avuto alcun gestori di eventi jQuery attaccati, non ha funzionato.

Quali effetti ha funzionato è stato:

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

grazie mille .. mi ha salvato la giornata! Anche io ho avuto un tale problema! –

3

grandi risposte. Lo faccio in questo modo. Stesso risultato: l'evento OnClick non viene disattivato se viene restituito un falso dalla funzione Java.

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

Sto scrivendo questa risposta solo perché sto utilizzando i pulsanti HTML con ASP.NET WebForms e non sono riuscito a trovare una soluzione perché dovrei sostituire il mio pezzo di codice con esempi di lavoro. Ecco la soluzione perché non funziona. Spero che ti aiuterà a capire il problema come controllare mi ha aiutato. Questo è il mio primo post, mi dispiace per lo stile.

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

E funzione javascript:

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

Utilizzando lato client click dopo la convalida corretta non è stata innescando eventi sul lato server che è stato rilegato a pulsante. Soluzione menzionata per modificare il codice in:

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

Funziona a causa del modo in cui viene creato il rendering html sulla pagina con onserverclick. Il pulsante Onserverclick on html è stato sostituito dal metodo __doPostBack da javascript. Fullcode del pulsante HTML rendering su lato client cerca in questo modo:

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

E dopo la sua sostituzione con se statment.

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

Operazioni con restituzione myValidate(); non sarà un evento tirgger perché ritorna prima di __doPostBack.

Il seguente codice consente di aggiungere un altro codice al pulsante se necessario e non causerà alcun problema.

0

Basta aggiungere javascript:

Esempio:

javascript:return ValidateMail(); 
+1

Benvenuti in Stack Overflow! Stack Overflow [richiede che tutti i messaggi siano in inglese] (https://stackoverflow.blog/2009/07/non-english-question-policy/). Ho rimosso la parte non inglese del tuo post per rispettare questa regola. Puoi anche utilizzare una di queste community Overflow dello stack specifiche per lingua che consentono il non inglese: [Spagnolo] (http://es.stackoverflow.com), [Giapponese] (http://ja.stackoverflow.com), [Russo ] (http://ru.stackoverflow.com), [Portoghese] (http://pt.stackoverflow.com). – FelixSFD