OnClick vs OnClientClick für ein asp: CheckBox?

stimmen
81

Weiß jemand, warum eine clientseitige JavaScript-Handler für asp: CheckBox muss ein OnClick = „“ Attribut anstatt ein OnClientClick = „“ Attribut sein, wie für asp: Button?

Zum Beispiel, das funktioniert:

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

und dies nicht (kein Fehler):

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

aber dies funktioniert:

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

und dies nicht (kompilieren Zeitfehler):

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

(Ich weiß, was Button.OnClick für ist, frage ich mich, warum CheckBox die gleiche Art und Weise nicht funktioniert ...)

Veröffentlicht am 16/07/2009 um 03:27
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
8

Sie haben Recht , dies unvereinbar ist. Was geschieht , ist , dass CheckBox keine serverseitige Ereignis OnClick haben, so dass Ihr Markup wird an den Browser gerendert. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Während Knopf hat eine OnClick haben - so ASP.NET einen Verweis auf ein Ereignis in Ihrem OnClick Markup erwartet.

Beantwortet am 16/07/2009 um 03:34
quelle vom benutzer

stimmen
98

Das ist sehr seltsam. Ich überprüfte die CheckBox Dokumentationsseite der wie folgt lautet

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

Wie Sie sehen können, gibt es keine OnClick oder OnClientClick Attribute definiert.

Vor diesem Hintergrund, ich denke, das ist, was geschieht.

Wenn Sie dies tun,

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

ASP.NET ändert nicht das OnClick Attribut und macht es wie auf dem Browser. Es wäre gemacht werden als:

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

Offensichtlich kann ein Browser verstehen ‚OnClick‘ und stellt eine Warnung aus.

Und in diesem Szenario

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

Auch hier ASP.NET das OnClientClick Attribut nicht ändern und es machen wird als

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

Als Browser wird nicht verstehen, OnClientClick nichts passieren. Es wird auch keine Fehler auslösen, da es nur ein weiteres Attribut ist.

Sie können durch einen Blick auf die gerenderte HTML oben bestätigen.

Und ja, das ist überhaupt nicht intuitiv.

Beantwortet am 16/07/2009 um 03:35
quelle vom benutzer

stimmen
8

Denn sie sind zwei verschiedene Arten von Kontrollen ...

Sehen Sie, Ihren Web-Browser nicht über Server-Seite Programmierung nicht kennt. es kennt nur seinen eigenen DOM und die Ereignismodelle, die es verwendet ... Und für Click-Ereignisse von Objekten, um es gemacht wird. Sie sollten das endgültige Markup untersuchen, die tatsächlich an den Browser von ASP.Net gesendet wird, um die Unterschiede, um sich selbst zu sehen.

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

macht zu

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

und

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

macht zu

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

Nun, so nah wie ich mich erinnern kann, gibt es keine überall Browser, die das „OnClientClick“ Ereignis in ihrem DOM unterstützen ...

Im Zweifelsfall immer die Quelle der Ausgabe sehen, wie sie an den Browser gesendet wird ... gibt es eine ganze Welt von Debug-Informationen, die Sie sehen können.

Beantwortet am 16/07/2009 um 03:39
quelle vom benutzer

stimmen
1

Ich war Aufräumen Warnungen und Meldungen und sehen, dass VS darüber warnt: Validation (ASP.Net): Attribut ‚OnClick‘ ist kein gültiges Attribut des Elements ‚CheckBox‘. Verwenden Sie die HTML-Eingabesteuerung, um einen Client-Seite-Handler angeben und dann werden Sie nicht den zusätzlichen span-Tag und die beiden Elemente erhalten.

Beantwortet am 03/10/2010 um 21:56
quelle vom benutzer

stimmen
5

Für diejenigen von euch , die hier wurde für die serverseitige Suche OnClickHandler istOnCheckedChanged

Beantwortet am 29/11/2012 um 17:00
quelle vom benutzer

stimmen
-1

Eine Lösung ist, mit JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Beantwortet am 19/01/2015 um 16:17
quelle vom benutzer

stimmen
0

Sie können den Tag wie folgt tun:

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

Die .Checked Eigenschaft im gerufenen JavaScript wird ... der aktuelle Zustand der Checkbox korrekt sein:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Beantwortet am 14/02/2018 um 21:28
quelle vom benutzer

stimmen
0

Asp.net CheckBox ist nicht Methode OnClientClick unterstützen.
Wenn Sie einige Javascript - Event hinzufügen möchten asp: CheckBox müssen Sie ähnliche Attribute auf „Pre_Render“ oder auf „Page_Load“ Ereignisse im Server - Code hinzu:

C #:

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

Hinweis: Vergewissern Sie sich nicht setzen AutoEventWireup = „false“ in Seitenkopf.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Beantwortet am 19/12/2018 um 12:29
quelle vom benutzer

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