Кто-нибудь знает, почему обработчик javascript на стороне клиента для asp: CheckBox должен быть атрибутом OnClick = "", а не атрибутом OnClientClick = "", как для asp: Button?
Например, это работает:
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
и это не так (без ошибки):
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
но это работает:
<asp:Button runat="server" OnClientClick="alert('Hi');" />
и этого не происходит (ошибка времени компиляции):
<asp:Button runat="server" OnClick="alert('hi');" />
(Я знаю, для чего нужен Button.OnClick; мне интересно, почему CheckBox не работает так же ...)
Потому что это два разных типа контроля ...
Видите ли, ваш веб-браузер не знает о программировании на стороне сервера. он знает только о своей собственной DOM и моделях событий, которые он использует ... И для событий щелчка объектов, отображаемых в нем. Вы должны изучить окончательную разметку, которая фактически отправляется браузеру из ASP.Net, чтобы увидеть различия сами.
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
оказывает на
<input type="check" OnClick="alert(this.checked);" />
и
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
оказывает на
<input type="check" OnClientClick="alert(this.checked);" />
Теперь, насколько я могу припомнить, нигде нет браузеров, поддерживающих событие "OnClientClick" в их DOM ...
В случае сомнений всегда просматривайте источник вывода, когда он отправляется в браузер ... есть целый мир отладочной информации, которую вы можете увидеть.
источник
Вы правы, это непоследовательно. Происходит то, что CheckBox НЕ ИМЕЕТ серверного события OnClick, поэтому ваша разметка отображается в браузере. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
В то время как Button имеет OnClick, поэтому ASP.NET ожидает ссылки на событие в вашей разметке OnClick.
источник
Для тех из вас, кто пришел сюда в поисках обработчика на стороне сервера,
OnClick
этоOnCheckedChanged
источник
Я очищал предупреждения и сообщения и вижу, что VS предупреждает об этом: Проверка (ASP.Net): Атрибут OnClick не является допустимым атрибутом элемента CheckBox. Используйте элемент управления вводом html, чтобы указать обработчик на стороне клиента, и тогда вы не получите дополнительный тег span и два элемента.
источник
Asp.net CheckBox не поддерживает метод OnClientClick.
Если вы хотите добавить какое-либо событие javascript в asp: CheckBox, вам необходимо добавить связанные атрибуты в события «Pre_Render» или «Page_Load» в коде сервера:
C #:
private void Page_Load(object sender, EventArgs e) { SomeCheckBoxId.Attributes["onclick"] = "MyJavaScriptMethod(this);"; }
Примечание. Убедитесь, что вы не установили AutoEventWireup = "false" в заголовке страницы.
VB:
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);" End Sub
источник
Сделать тег можно так:
<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />
Свойство .checked в вызываемом JavaScript будет правильным ... текущее состояние флажка:
function checkchanged(obj) { alert(obj.checked) }
источник
Одно из решений - JQuery:
$(document).ready( function () { $('#mycheckboxId').click(function () { // here the action or function to call }); } );
источник