OnClick vs OnClientClick egy asp: CheckBox?

szavazat
81

Tudja valaki, hogy miért kliensoldali javascript kezelőjét asp: CheckBox kell egy onclick = „” attribútum helyett OnClientClick = „” attribútum, mint asp: Gomb?

Például ez működik:

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

és ez nem (nincs hiba):

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

de ez működik:

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

és ez nem (fordításkor hiba):

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

(Tudom, hogy mi van a Button.OnClick; kíváncsi vagyok, miért négyzet nem ugyanúgy működik ...)

A kérdést 16/07/2009 03:27
a forrás felhasználó
Más nyelveken...                            


8 válasz

szavazat
8

Igaza van, ez ellentmondásos. Mi történik az, hogy a négyzet nem rendelkezik a szerver oldali onclick eseményt, így a jelölést kap átadták a böngészőt. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Míg gomb nem egy onclick - így ASP.NET elvárja hivatkozás egy eseményt az onclick jelölést.

Válaszolt 16/07/2009 03:34
a forrás felhasználó

szavazat
98

Ez nagyon furcsa. Megnéztem a CheckBox dokumentációs oldal , amely így szól

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

Mint látható, nincs onclick vagy OnClientClick attribútumot.

Ezt szem előtt tartva, azt hiszem, ez az, ami történik.

Ha ezt megteszi,

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

ASP.NET nem módosítja a onclick attribútumot, és teszi azt is a böngésző. Ez válna, mint:

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

Nyilvánvaló, hogy a böngésző megérti „onclick”, és hozza a riasztást.

És ebben a helyzetben

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

Ismét ASP.NET nem fogja megváltoztatni a OnClientClick attribútumot és lehetővé teszi majd azt

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

Mivel a böngésző nem fogja érteni OnClientClick semmi sem fog történni. Ugyancsak nem emel hibát, mint ez is csak egy tulajdonság.

Meg tudja erősíteni a fenti nézi a renderelt HTML.

És igen, ez nem intuitív egyáltalán.

Válaszolt 16/07/2009 03:35
a forrás felhasználó

szavazat
8

Mert két különböző ellenőrzések ...

Látod, a böngésző nem tud szerver oldali programozás. csak annyit tud róla saját DOM és az esemény modell, hogy használ ... És kattintással események tárgyak tette hozzá. Meg kell vizsgálni a végleges jelölés a ténylegesen küldött a böngésző ASP.Net látni a különbséget a saját.

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

renderel

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

és

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

renderel

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

Most, közel jól emlékszem, de nincsenek böngészők bárhol, amely támogatja a „OnClientClick” esemény a DOM ...

Ha kétségei vannak, mindig megtekintheti a forrás a kimenet azt megküldik a böngésző ... van egy egész világ hibakeresési információkat láthatjuk.

Válaszolt 16/07/2009 03:39
a forrás felhasználó

szavazat
1

Takarítottam fel figyelmeztetések és üzenetek és látni, hogy a VS nem figyelmeztet rá: Validation (ASP.Net): Képesség „onclick” nem érvényes attribútuma elem „jelölőnégyzetet.” A következő html input ellenőrzési meghatározni ügyféloldali felvezető és akkor nem fog az extra span címkét, és a két elem.

Válaszolt 03/10/2010 21:56
a forrás felhasználó

szavazat
5

Azoknak, akik kapott itt keresi a szerver oldali OnClickfelvezető ezOnCheckedChanged

Válaszolt 29/11/2012 17:00
a forrás felhasználó

szavazat
-1

Az egyik megoldás az jQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Válaszolt 19/01/2015 16:17
a forrás felhasználó

szavazat
0

Ezt megteheti a tag, mint ez:

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

A .checked ingatlan az úgynevezett JavaScript megfelelő lesz ... a jelenlegi állapotában a négyzetet:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Válaszolt 14/02/2018 21:28
a forrás felhasználó

szavazat
0

Asp.net CheckBox nem támogatja eljárás OnClientClick.
Ha azt szeretnénk, hogy adjunk néhány javascript esemény Asp: CheckBox van hozzá kapcsolódó attribútumok „Pre_Render” vagy „Page_Load” események szerver kód:

C #:

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

Megjegyzés: Győződjön meg róla, ne állítsa AutoEventWireup = „false” oldal fejlécében.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Válaszolt 19/12/2018 12:29
a forrás felhasználó

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