OnClick vs OnClientClick per un asp: CheckBox?

voti
81

Qualcuno sa il motivo per cui un javascript gestore per asp sul lato client: Casella di controllo deve essere un onclick = l'attributo piuttosto che un OnClientClick = l'attributo, come per asp: Button?

Ad esempio, questo funziona:

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

E questo non (nessun errore):

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

ma questo funziona:

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

e questo non (errore di compilazione tempo):

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

(Lo so che cosa è per Button.OnClick; mi chiedo perché CheckBox non funziona allo stesso modo ...)

È pubblicato 16/07/2009 alle 03:27
fonte dall'utente
In altre lingue...                            


8 risposte

voti
8

Hai ragione questo è incoerente. Quello che sta accadendo è che la casella non dispone di un server-side evento OnClick, in modo che il margine di profitto viene eseguito il rendering del browser. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Mentre Button ha un OnClick - in modo da ASP.NET si aspetta un riferimento a un evento nella vostra markup Su clic.

Risposto il 16/07/2009 a 03:34
fonte dall'utente

voti
98

Questo è molto strano. Ho controllato la pagina di documentazione CheckBox che legge

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

Come si può vedere, non v'è alcuna OnClick o attributi OnClientClick definiti.

Tenendo questo in mente, credo che questo è ciò che sta accadendo.

Quando si esegue questa operazione,

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

ASP.NET non modifica l'attributo OnClick e lo rende così come sul browser. Si sarebbe resa come:

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

Ovviamente, un browser in grado di capire 'OnClick' e mette un avviso.

E in questo scenario

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

Ancora una volta, ASP.NET non cambierà il OnClientClick attributo e renderà come

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

Browser non capirà OnClientClick non accadrà nulla. Essa, inoltre, non solleva alcun errore in quanto è solo un altro attributo.

È possibile confermare sopra guardando il rendering HTML.

E sì, questo non è intuitivo a tutti.

Risposto il 16/07/2009 a 03:35
fonte dall'utente

voti
8

Perché sono due diversi tipi di controlli ...

Vedete, il browser web non sa di programmazione lato server. si conosce solo su di esso la propria DOM ed i modelli di eventi che usa ... E per eventi click di oggetti resi a esso. Si dovrebbe esaminare la marcatura finale che è in realtà inviato al browser da ASP.Net per vedere le differenze vostra auto.

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

rende a

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

e

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

rende a

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

Ora, il più vicino che posso ricordare, non ci sono i browser ovunque che supportano l'evento "OnClientClick" nel loro DOM ...

In caso di dubbio, sempre visualizzare l'origine della produzione in quanto è inviato al browser ... c'è un intero mondo di informazioni di debug che si può vedere.

Risposto il 16/07/2009 a 03:39
fonte dall'utente

voti
1

Stavo ripulendo avvisi e messaggi e vedo che VS mette in guardia su di esso: Validation (ASP.Net): attributo 'OnClick' non è un attributo valido dell'elemento 'casella'. Utilizzare il controllo di input html per specificare un gestore lato client e quindi non sarà possibile ottenere il tag span supplementare e i due elementi.

Risposto il 03/10/2010 a 21:56
fonte dall'utente

voti
5

Per quelli di voi che si sono qui in cerca di lato server OnClickdel gestore èOnCheckedChanged

Risposto il 29/11/2012 a 17:00
fonte dall'utente

voti
-1

Una soluzione è con jQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Risposto il 19/01/2015 a 16:17
fonte dall'utente

voti
0

Si può fare il tag in questo modo:

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

La proprietà .checked nella chiamata JavaScript sarà corretta ... lo stato attuale della casella di controllo:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Risposto il 14/02/2018 a 21:28
fonte dall'utente

voti
0

Asp.net casella di controllo non è il supporto metodo OnClientClick.
Se si desidera aggiungere un po 'di javascript evento a ASP: CheckBox si deve aggiungere attributi correlati su "Pre_Render" o su "Page_Load" eventi nel codice del server:

C #:

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

Nota: assicurarsi di non impostare AutoEventWireup = "false" nell'intestazione 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
Risposto il 19/12/2018 a 12:29
fonte dall'utente

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