OnClick vs OnClientClick pentru un asp: CheckBox?

voturi
81

Stie cineva de ce un client-side JavaScript handler pentru asp: CheckBox trebuie să fie un „atribut, mai degrabă decât un OnClientClick =“ onclick = „“ atribut, ca și pentru asp: buton?

De exemplu, aceasta funcționează:

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

iar acest lucru nu (nici o eroare):

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

dar acest lucru funcționează:

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

iar acest lucru nu (compilare eroare de timp):

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

(Știu ce este Button.OnClick pentru, mă întreb de ce nu CheckBox funcționează în același mod ...)

Întrebat 16/07/2009 la 03:27
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
8

Ai dreptate acest lucru este incompatibil. Ceea ce se întâmplă este că CheckBox nu are un server-side eveniment OnClick, astfel încât markup devine redat în browser. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Întrucât Button are un OnClick - astfel încât ASP.NET se așteaptă ca o referire la un eveniment în dvs. de markup OnClick.

Publicat 16/07/2009 la 03:34
sursa de către utilizator

voturi
98

Asta este foarte ciudat. Am verificat pagina de documentare CheckBox care citește

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

După cum puteți vedea, nu există nici un OnClick sau atribute OnClientClick definite.

Păstrarea în vedere acest lucru, cred că acest lucru este ceea ce se întâmplă.

Când faceți acest lucru,

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

ASP.NET nu modifică atributul OnClick și redă-l ca este pe browser. Ar fi prestate ca:

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

Evident, un browser poate înțelege „onClick“ și pune o alertă.

Și în acest scenariu

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

Din nou, ASP.NET nu se va schimba OnClientClick atributul și va face ca

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

Ca browser-ul nu va înțelege OnClientClick nimic nu se va întâmpla. De asemenea, nu va ridica nici o eroare, deoarece este doar un alt atribut.

Puteți confirma mai sus de către uita la HTML prestate.

Și da, acest lucru nu este deloc intuitiv.

Publicat 16/07/2009 la 03:35
sursa de către utilizator

voturi
8

Deoarece acestea sunt două tipuri diferite de controale ...

Vezi tu, browser-ul web nu știe despre programare pe partea de server. stie doar despre ea propriu DOM si modelele de evenimente pe care le folosește ... Și pentru evenimentele legate de clicuri de obiecte prestate acesta. Tu ar trebui să examineze marcajul final care este, de fapt trimis la browser-ul de la ASP.Net pentru a vedea diferențele de sine.

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

face să

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

și

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

face să

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

Acum, în măsura în care îmi amintesc, nu există browsere oriunde acceptă „OnClientClick“ eveniment în DOM lor ...

Când aveți dubii, vizualizați întotdeauna sursa de ieșire ca acesta este trimis la browser ... există o lume întreagă de informații de depanare pe care le puteți vedea.

Publicat 16/07/2009 la 03:39
sursa de către utilizator

voturi
1

Am fost curățarea avertismente și mesaje și să vadă că VS avertizează cu privire la aceasta: Validare (ASP.Net): atributul „onClick“ nu este un atribut valid al elementului „CheckBox“. Utilizați controlul de intrare HTML pentru a specifica un handler partea de client și atunci nu va primi tag-ul interval suplimentar și cele două elemente.

Publicat 03/10/2010 la 21:56
sursa de către utilizator

voturi
5

Pentru cei dintre voi care s- au aici în căutarea pentru server-side OnClickhandler esteOnCheckedChanged

Publicat 29/11/2012 la 17:00
sursa de către utilizator

voturi
-1

O soluție este cu JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Publicat 19/01/2015 la 16:17
sursa de către utilizator

voturi
0

Puteți face eticheta ca aceasta:

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

Proprietatea .checked în numita JavaScript va fi corect ... starea curentă a caseta de selectare:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Publicat 14/02/2018 la 21:28
sursa de către utilizator

voturi
0

Asp.net CheckBox nu este de sprijin metoda OnClientClick.
Dacă doriți să adăugați câteva JavaScript eveniment asp: CheckBox trebuie să adăugați atribute legate de pe „Pre_Render“ sau pe evenimente „Page_Load“ în codul de server:

C #:

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

Notă: Asigurați-vă că nu setați AutoEventWireup = „false“ din antetul paginii.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Publicat 19/12/2018 la 12:29
sursa de către utilizator

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