OnClick vs OnClientClick voor een asp: CheckBox?

stemmen
81

Weet iemand waarom een ​​client-side javascript handler voor asp: CheckBox nodig heeft om een ​​OnClick = attribuut in plaats van een OnClientClick = attribuut zijn, als voor asp: Button?

Bijvoorbeeld, dit werkt:

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

en dit niet (geen fout):

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

maar dit werkt:

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

en dit niet (compileren fout):

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

(Ik weet wat Button.OnClick is voor, ik vraag me af waarom CheckBox op dezelfde manier niet werkt ...)

De vraag is gesteld op 16/07/2009 om 03:27
bron van user
In andere talen...                            


8 antwoorden

stemmen
8

Je hebt gelijk dit is inconsistent. Wat er gebeurt, is dat het selectievakje niet over een server-side OnClick event, zodat uw markup wordt bewezen aan de browser. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Overwegende dat Button heeft een OnClick - dus ASP.NET een verwijzing naar een gebeurtenis in uw OnClick markup verwacht.

antwoordde op 16/07/2009 om 03:34
bron van user

stemmen
98

Dat is heel raar. Ik controleerde de CheckBox documentatie pagina die leest

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

Zoals u kunt zien, is er geen OnClick of OnClientClick attributen gedefinieerd.

Met dit in gedachten, ik denk dat dit is wat er gebeurt.

Wanneer u dit doet,

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

ASP.NET niet wijzigen van de OnClick attribuut en maakt het net als in de browser. Het zou worden weergegeven als:

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

Uiteraard kan een browser begrijpen 'OnClick' en zet een waarschuwing.

En in dit scenario

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

Nogmaals, ASP.NET niet de OnClientClick attribuut te veranderen en zal het te maken als

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

Zoals browser niet zullen begrijpen OnClientClick niets zal gebeuren. Het zal ook geen enkele fout te verhogen want het is gewoon een ander attribuut.

U kunt bovenstaande bevestigen door te kijken naar de gerenderde HTML.

En ja, dit is niet intuïtief helemaal.

antwoordde op 16/07/2009 om 03:35
bron van user

stemmen
8

Omdat ze zijn twee verschillende soorten controles ...

U ziet, uw web-browser niet weet over server side programmeren. Het kent alleen over zijn eigen DOM en de gebeurtenis modellen die het gebruikt ... En voor klikgebeurtenissen objecten teruggegeven aan. U moet de uiteindelijke markup die daadwerkelijk naar de browser van ASP.Net wordt gestuurd om de verschillen te zien uw zelf te onderzoeken.

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

maakt om

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

en

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

maakt om

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

Nu, zo dicht als ik me kan herinneren, zijn er geen browsers overal dat de "OnClientClick" event te ondersteunen bij hun DOM ...

Bij twijfel altijd bekijk de bron van de output als het naar de browser wordt gestuurd ... er is een hele wereld van debug informatie die u kunt zien.

antwoordde op 16/07/2009 om 03:39
bron van user

stemmen
1

Ik was het opruimen van waarschuwingen en berichten en zie dat VS waarschuwt erover: Validation (ASP.Net): Attribute 'OnClick' is geen geldig attribuut van element 'CheckBox'. Gebruik de onderstaande html-ingang controle om een ​​client handler opgeven en dan zult u niet de extra tag span en de twee elementen te krijgen.

antwoordde op 03/10/2010 om 21:56
bron van user

stemmen
5

Voor degenen onder u die hier werd op zoek naar de server-side OnClickhandler isOnCheckedChanged

antwoordde op 29/11/2012 om 17:00
bron van user

stemmen
-1

Een oplossing is met JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
antwoordde op 19/01/2015 om 16:17
bron van user

stemmen
0

U kunt de tag als dit:

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

De .checked pand in het zogenaamde JavaScript zal correct zijn ... de huidige stand van de checkbox:

  function checkchanged(obj) {
      alert(obj.checked)
  }
antwoordde op 14/02/2018 om 21:28
bron van user

stemmen
0

Asp.net CheckBox wordt niet ondersteund werkwijze OnClientClick.
Als u wilt wat javascript evenement toe te voegen aan asp: CheckBox je moet gerelateerde attributen "Pre_Render" of "Page_Load" gebeurtenissen in server code toe te voegen:

C #:

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

Let op: Zorg ervoor dat u niet instelt AutoEventWireup = "false" in de koptekst van de pagina.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
antwoordde op 19/12/2018 om 12:29
bron van user

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