¿Alguien sabe por qué un controlador de JavaScript del lado del cliente para asp: CheckBox debe ser un atributo OnClick = "" en lugar de un atributo OnClientClick = "", como para asp: Button?
Por ejemplo, esto funciona:
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
y esto no (sin error):
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
pero esto funciona:
<asp:Button runat="server" OnClientClick="alert('Hi');" />
y esto no (error de tiempo de compilación):
<asp:Button runat="server" OnClick="alert('hi');" />
(Sé para qué sirve Button.OnClick; me pregunto por qué CheckBox no funciona de la misma manera ...)
Porque son dos tipos diferentes de controles ...
Verá, su navegador web no conoce la programación del lado del servidor. solo conoce su propio DOM y los modelos de eventos que usa ... Y para eventos de clic de objetos renderizados en él. Debe examinar el marcado final que realmente se envía al navegador desde ASP.Net para ver las diferencias usted mismo.
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
rinde a
<input type="check" OnClick="alert(this.checked);" />
y
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
rinde a
<input type="check" OnClientClick="alert(this.checked);" />
Ahora, por lo que puedo recordar, no hay navegadores en ninguna parte que admitan el evento "OnClientClick" en su DOM ...
En caso de duda, siempre vea la fuente de la salida a medida que se envía al navegador ... hay todo un mundo de información de depuración que puede ver.
fuente
Tienes razón, esto es inconsistente. Lo que está sucediendo es que CheckBox no TIENE un evento OnClick del lado del servidor, por lo que su marcado se procesa en el navegador. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
Mientras que Button tiene un OnClick, ASP.NET espera una referencia a un evento en su marcado OnClick.
fuente
Para aquellos de ustedes que llegaron aquí buscando el controlador del lado del servidor
OnClick
, esOnCheckedChanged
fuente
Estaba limpiando advertencias y mensajes y veo que VS advierte al respecto: Validación (ASP.Net): El atributo 'OnClick' no es un atributo válido del elemento 'CheckBox'. Use el control de entrada html para especificar un controlador del lado del cliente y luego no obtendrá la etiqueta span adicional y los dos elementos.
fuente
Asp.net CheckBox no es el método de soporte OnClientClick.
Si desea agregar algún evento javascript a asp: CheckBox, debe agregar atributos relacionados en los eventos "Pre_Render" o "Page_Load" en el código del servidor:
C#:
private void Page_Load(object sender, EventArgs e) { SomeCheckBoxId.Attributes["onclick"] = "MyJavaScriptMethod(this);"; }
Nota: asegúrese de no configurar AutoEventWireup = "false" en el encabezado de la página.
VB:
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);" End Sub
fuente
Puedes hacer la etiqueta de esta manera:
<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />
La propiedad .checked en el JavaScript llamado será correcta ... el estado actual de la casilla de verificación:
function checkchanged(obj) { alert(obj.checked) }
fuente
Una solución es con JQuery:
$(document).ready( function () { $('#mycheckboxId').click(function () { // here the action or function to call }); } );
fuente