2010-10-08 12 views
8

Po prostu chcę dodać sprawdzanie poprawności strony klienta (JQuery Javascript) w kontrolerze internetowej. Wstawiam program obsługi OnClientClick i wywoływana jest funkcja. ALE, nawet jeśli zwrócę "false", metoda OnClick zawsze zostanie wyrzucona. Co ja robię źle ?ASP.NET OnClientClick = "return false;" nie działa

Jestem z VS 2010, kierując do ram 4.0 z JQuery 1.4.2. i JQuery UI 1.8.4.

Oto przykładowy kod: Metoda

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

Scenariusz:

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

}

Jeśli mogę umieścić punkt przerwania w przypadku Page_Load, widzę, że dostać się i btnAddSave_Click zdarzenie jest również wykonywane.

+0

Czy próbowałeś bez oknie alertu? Czytałem inny post jak ten ostatnio –

+0

Testowałem to z ASP.NET 4 i uzyskać oczekiwane zachowanie. –

+3

Sprawdź, czy nie występują błędy javascript, które powodują zatrzymanie zwracania fałszu. – Aristos

Odpowiedz

3

Spróbuj zmienić ją

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

Dzięki za odpowiedź, działa - ale to nie ma sensu! 3 miesiące wcześniej naprawiłem ten sam problem z Firefoksem (przed ich ostatnią wersją) i działało z "return ValidateMail();". –

+1

@ alonso.torres Nie rozumiem tego. Czy po prostu nie zwróci false "zawsze", tzn. Nawet jeśli formularz przejdzie sprawdzanie poprawności, teraz zwróci jako nieważny, dlatego OnClick nigdy nie zostanie uruchomiony? – rism

8

z jakiegoś powodu, chociaż nie mam żadnych obsługi zdarzeń jquery dołączony, to nie działa.

Co faktycznie przepracowanych było:

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

wielkie dzięki ... uratowałem mój dzień! Nawet ja miałem taki problem! –

3

Wielkie odpowiedzi. Robię to w ten sposób. Ten sam wynik - zdarzenie OnClick nie jest uruchamiane, jeśli zwrócono wartość false z funkcji Java.

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

Piszę tę odpowiedź tylko dlatego używam przycisków HTML z ASP.NET WebForms i nie mogłem znaleźć rozwiązanie dla których warto wymienić mój kawałek kodu z przykładów roboczych. Oto rozwiązanie, dlaczego nie działa. Mam nadzieję, że pomoże ci to zrozumieć, jak pomogło mi to sprawdzenie. To jest mój pierwszy post, więc przepraszam za styl.

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

i JavaScript funkcja:

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

Korzystanie klienta boczny kliknij po poprawna walidacja nie wyzwalania zdarzenia po stronie serwera, który został zbindowanych przycisku. Rozwiązanie wymienione w celu zmiany kodu na:

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

Działa ze względu na sposób, w jaki jest renderowany HTML na stronie z onserverclick. Przycisk onserverclick na html jest zastępowany przez metodę __doPostBack z javascript. Pełny kod przycisku html renderowanego po stronie klienta wygląda następująco:

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

I po zastąpieniu go, jeśli jest to oznaczenie.

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

Praca z funkcją return myValidate(); nie zmieni zdarzenia, ponieważ zwraca się przed __doPostBack.

Poniższy kod pozwoli ci dodać inny kod do przycisku, jeśli będzie to konieczne i nie spowoduje żadnych problemów.

0

Wystarczy dodać javascript:

Przykład:

javascript:return ValidateMail(); 
+1

Witamy w Stack Overflow! Stack Overflow [wymaga, aby wszystkie posty były w języku angielskim] (https://stackoverflow.blog/2009/07/non-english-question-policy/). Usunąłem nie-angielską część Twojego posta, aby zachować zgodność z tą zasadą. Możesz także skorzystać z jednej z tych specyficznych dla języka grup, w których przepełnienia stosu nie można używać w języku angielskim: [hiszpański] (http://es.stackoverflow.com), [japoński] (http://ja.stackoverflow.com), [rosyjski ] (http://ru.stackoverflow.com), [portugalski] (http://pt.stackoverflow.com). – FelixSFD

Powiązane problemy