OnClick vs OnClientClick dla asp: CheckBox?

głosy
81

Czy ktoś wie dlaczego po stronie klienta javascript obsługi dla asp: CheckBox musi być OnClick = „” atrybut raczej niż OnClientClick = „” atrybut, jak dla asp: przycisk?

Na przykład, to działa:

<asp:CheckBox runat=server OnClick=alert(this.checked); />

i to nie (brak błędów):

<asp:CheckBox runat=server OnClientClick=alert(this.checked); />

ale to działa:

<asp:Button runat=server OnClientClick=alert('Hi'); />

i to nie (błąd kompilacji czas):

<asp:Button runat=server OnClick=alert('hi'); />

(Wiem, co jest dla Button.OnClick; Zastanawiam się dlaczego CheckBox nie działa w ten sam sposób ...)

Utwórz 16/07/2009 o 03:27
źródło użytkownik
W innych językach...                            


8 odpowiedzi

głosy
8

Masz rację, to jest niespójne. Co się dzieje jest, że CheckBox nie mają po stronie serwera zdarzenie OnClick, więc markup pobiera renderowane w przeglądarce. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Natomiast Buttona ma OnClick - tak ASP.NET przewiduje odwołanie do zdarzenia w OnClick znaczników.

Odpowiedział 16/07/2009 o 03:34
źródło użytkownik

głosy
98

To jest bardzo dziwne. Sprawdziłem stronę dokumentacji CheckBox który brzmi

<asp:CheckBox id="CheckBox1" 
     AutoPostBack="True|False"
     Text="Label"
     TextAlign="Right|Left"
     Checked="True|False"
     OnCheckedChanged="OnCheckedChangedMethod"
     runat="server"/>

Jak widać, nie ma OnClick lub OnClientClick atrybuty zdefiniowane.

Mając to na uwadze, że to co się dzieje.

Po wykonaniu tej czynności,

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

ASP.NET nie zmienia atrybut OnClick i czyni go tak jak w przeglądarce. Byłoby renderowane jako:

  <input type="checkbox" OnClick="alert(this.checked);" />

Oczywiście, przeglądarka może zrozumieć „onClick” i stawia alert.

I w tym scenariuszu

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

Ponownie, ASP.NET nie zmieni OnClientClick atrybut i uczyni go jako

<input type="checkbox" OnClientClick="alert(this.checked);" />

Jako przeglądarka nie zrozumie OnClientClick nic się nie stanie. To również nie wzbudzi żadnego błędu, ponieważ jest to tylko kolejny atrybut.

Można potwierdzić powyżej patrząc na renderowane HTML.

I tak, to nie jest intuicyjny w ogóle.

Odpowiedział 16/07/2009 o 03:35
źródło użytkownik

głosy
8

Ponieważ są to dwa różne rodzaje kontroli ...

Widzisz, że twoja przeglądarka nie wie na temat programowania po stronie serwera. to wie tylko o swój własny DOM i modele zdarzeń, że używa ... a za kliknięcie zdarzeń obiektów wydanych do niego. Należy zbadać ostateczną znaczników nie jest faktycznie wysyłany do przeglądarki z ASP.NET, aby zobaczyć różnice siebie.

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

świadczy na rzecz

<input type="check" OnClick="alert(this.checked);" />

i

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

świadczy na rzecz

<input type="check" OnClientClick="alert(this.checked);" />

Teraz, tak blisko, jak mogę sobie przypomnieć, nie ma nigdzie przeglądarek, które wspierają „OnClientClick” zdarzenie w swoim DOM ...

W razie wątpliwości zawsze zobaczyć źródło wyjścia jak to jest wysyłane do przeglądarki ... istnieje cały świat informacji debugowania, które można zobaczyć.

Odpowiedział 16/07/2009 o 03:39
źródło użytkownik

głosy
1

Byłem oczyszczania ostrzeżeń i komunikatów i zobaczyć, że VS nie ostrzegają o tym: Validation (ASP.NET): Atrybut „OnClick” nie jest prawidłowym atrybutem elementu „wyboru”. Regulatorem wejściowego HTML określić obsługi po stronie klienta i wtedy nie dostaniesz dodatkowy znacznik zakresu i dwa elementy.

Odpowiedział 03/10/2010 o 21:56
źródło użytkownik

głosy
5

Dla tych z was, którzy mnie tutaj szukając po stronie serwera OnClickobsługi jestOnCheckedChanged

Odpowiedział 29/11/2012 o 17:00
źródło użytkownik

głosy
-1

Jednym z rozwiązań jest z JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Odpowiedział 19/01/2015 o 16:17
źródło użytkownik

głosy
0

Można zrobić tag tak:

<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />

Nieruchomość .checked w nazwie JavaScripcie będą poprawne ... obecny stan pola wyboru:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Odpowiedział 14/02/2018 o 21:28
źródło użytkownik

głosy
0

Asp.net CheckBox nie obsługują metody OnClientClick.
Jeśli chcesz dodać jakieś zdarzenie javascript asp: CheckBox trzeba dodać podobnych atrybutów „Pre_Render” lub na „Page_Load” zdarzeń w kodzie serwera:

DO#:

    private void Page_Load(object sender, EventArgs e)
    {
        SomeCheckBoxId.Attributes["onclick"] = "MyJavaScriptMethod(this);";
    }

Uwaga: Upewnij się, że nie należy ustawiać AutoEventWireup = „false” w nagłówku strony.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Odpowiedział 19/12/2018 o 12:29
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more