OnClick vs OnClientClick pro asp: CheckBox?

hlasů
81

Ví někdo, proč na straně klienta JavaScript handler pro asp: CheckBox musí být OnClick = „“ atribut spíše než OnClientClick = „“ atribut, pokud jde o asp: Button?

Například, to funguje:

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

a to není (žádná chyba):

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

ale to funguje:

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

a to není (kompilace chyba čas):

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

(Já vím, co je pro Button.OnClick, Zajímalo by mě, proč CheckBox nefunguje stejným způsobem ...)

Položena 16/07/2009 v 03:27
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
8

Máte pravdu, je to v rozporu. To, co se děje, je, že CheckBox nemá na straně serveru při klepnutí pro pořádání akcí, takže značkovací dostane vykreslen do prohlížeče. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Zatímco Button má mít OnClick - takže ASP.NET očekává odkaz na události ve svém klepnutí značek.

Odpovězeno 16/07/2009 v 03:34
zdroj uživatelem

hlasů
98

To je velmi podivné. Zkontroloval jsem dokumentace stránku CheckBox který čte

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

Jak vidíte, není klepnutí nebo OnClientClick atributy definovány.

Udržet toto na paměti, myslím, že to je to, co se děje.

Když to uděláte,

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

ASP.NET nemění atribut klepnutí a činí ji tak je v prohlížeči. Bylo by být vyjádřen jako:

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

Je zřejmé, že prohlížeč může pochopit onClick a dá výstrahu.

A v tomto scénáři

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

Opět platí, že ASP.NET nezmění OnClientClick atribut a bude činit ji jako

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

Jako prohlížeč nebude rozumět OnClientClick nic se nestane. To také nebude zvyšovat žádnou chybu, protože je to jen další atribut.

Můžete potvrdit výše prohlédnutím vykreslený HTML.

A ano, to není intuitivní vůbec.

Odpovězeno 16/07/2009 v 03:35
zdroj uživatelem

hlasů
8

Protože se jedná o dva různé druhy kontrol ...

Vidíte, váš webový prohlížeč neví o straně serveru programování. to ví jen o jeho vlastní DOM a modely událostí, který využívá ... A click události objektů poskytovaných na něj. Ty by měly zkoumat konečné značky, která je skutečně odeslán do prohlížeče z ASP.Net vidět rozdíly sami sebe.

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

omítky na

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

a

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

omítky na

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

Nyní, jak blízko, jak jen mohu vzpomenout, nejsou tam žádné prohlížeče kdekoli, které podporují „OnClientClick“ událost v jejich DOM ...

V případě pochybností, vždy zobrazit zdroj výstupu, jak je poslán do prohlížeče ... je tu celý svět ladění informace, které můžete vidět.

Odpovězeno 16/07/2009 v 03:39
zdroj uživatelem

hlasů
1

Byl jsem uklízet varování a zpráv a vidět, že VS má varovat: Validation (ASP.Net): Atribut ‚klepnutí‘ není platný atribut prvku "políčko. Použijte ovládací prvek vstupní html specifikovat straně klienta psovoda a pak nebudete mít extra span značku a dva prvky.

Odpovězeno 03/10/2010 v 21:56
zdroj uživatelem

hlasů
5

Pro ty z vás, kteří dostali sem hledat na straně serveru OnClickhandler jeOnCheckedChanged

Odpovězeno 29/11/2012 v 17:00
zdroj uživatelem

hlasů
-1

Jedním z řešení je s jQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Odpovězeno 19/01/2015 v 16:17
zdroj uživatelem

hlasů
0

Můžete to udělat značku, jako je tento:

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

.checked majetek volané JavaScriptu bude správné ... současný stav tohoto políčka:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Odpovězeno 14/02/2018 v 21:28
zdroj uživatelem

hlasů
0

Asp.net CheckBox je nepodporuje metodu OnClientClick.
Chcete-li přidat nějaký javascript událost asp: CheckBox budete muset přidat související atributy „Pre_Render“ nebo na „Page_Load“ událostí v kódu serveru:

C#:

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

Poznámka: Ujistěte se, že nenastavíte AutoEventWireup = „false“ v záhlaví stránky.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Odpovězeno 19/12/2018 v 12:29
zdroj uživatelem

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