Alguém sabe por que um manipulador de javascript do lado do cliente para asp: CheckBox precisa ser um atributo OnClick = "" em vez de um atributo OnClientClick = "", como para asp: Button?
Por exemplo, isso funciona:
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
e isso não (sem erro):
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
mas isso funciona:
<asp:Button runat="server" OnClientClick="alert('Hi');" />
e isso não (erro de tempo de compilação):
<asp:Button runat="server" OnClick="alert('hi');" />
(Eu sei para que serve o Button.OnClick; estou me perguntando por que o CheckBox não funciona da mesma maneira ...)
Porque são dois tipos diferentes de controles ...
Você vê, seu navegador da web não sabe sobre programação do lado do servidor. ele só conhece seu próprio DOM e os modelos de eventos que usa ... E para eventos de clique de objetos renderizados para ele. Você deve examinar a marcação final que é realmente enviada para o navegador do ASP.Net para ver as diferenças você mesmo.
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
renderiza para
<input type="check" OnClick="alert(this.checked);" />
e
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
renderiza para
<input type="check" OnClientClick="alert(this.checked);" />
Agora, pelo que me lembro, não há navegadores em nenhum lugar que ofereçam suporte ao evento "OnClientClick" em seu DOM ...
Em caso de dúvida, sempre veja a origem da saída conforme ela é enviada ao navegador ... há um mundo inteiro de informações de depuração que você pode ver.
fonte
Você está certo, isso é inconsistente. O que está acontecendo é que a CheckBox não TEM um evento OnClick do lado do servidor, então sua marcação é renderizada para o navegador. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
Considerando que Button tem um OnClick - então o ASP.NET espera uma referência a um evento em sua marcação OnClick.
fonte
Para aqueles que chegaram aqui procurando o manipulador do lado do servidor
OnClick
, éOnCheckedChanged
fonte
Eu estava limpando avisos e mensagens e vi que o VS avisa sobre isso: Validação (ASP.Net): O atributo 'OnClick' não é um atributo válido do elemento 'CheckBox'. Use o controle de entrada html para especificar um manipulador do lado do cliente e você não obterá a tag span extra e os dois elementos.
fonte
Asp.net CheckBox não é compatível com o método OnClientClick.
Se você deseja adicionar algum evento javascript ao asp: CheckBox, você deve adicionar atributos relacionados em "Pre_Render" ou em eventos "Page_Load" no código do servidor:
C #:
private void Page_Load(object sender, EventArgs e) { SomeCheckBoxId.Attributes["onclick"] = "MyJavaScriptMethod(this);"; }
Nota: Certifique-se de não definir AutoEventWireup = "false" no cabeçalho da 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
fonte
Você pode fazer a tag assim:
<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />
A propriedade .checked no JavaScript chamado estará correta ... o estado atual da caixa de seleção:
function checkchanged(obj) { alert(obj.checked) }
fonte
Uma solução é com JQuery:
$(document).ready( function () { $('#mycheckboxId').click(function () { // here the action or function to call }); } );
fonte