OnClick vs OnClientClick для asp: флажок?
кто-нибудь знает, почему обработчик 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');" />
(Я знаю, какая кнопка.OnClick для; Мне интересно, почему флажок Не работает точно так же...)
7 ответов:
это очень странно. Я проверил флажок страница документации, который читает
<asp:CheckBox id="CheckBox1" AutoPostBack="True|False" Text="Label" TextAlign="Right|Left" Checked="True|False" OnCheckedChanged="OnCheckedChangedMethod" runat="server"/>
как вы можете видеть, нет никаких атрибутов OnClick или OnClientClick.
имея это в виду, я думаю, что это то, что происходит.
при этом
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
ASP.NET не изменяет атрибут OnClick и отображает его как в браузере. Он будет отображаться как:
<input type="checkbox" OnClick="alert(this.checked);" />
очевидно, браузер может понять "OnClick" и ставит предупреждение.
и в этом случае
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
еще раз, ASP.NET не изменит атрибут OnClientClick и отобразит его как
<input type="checkbox" OnClientClick="alert(this.checked);" />
как браузер не поймет OnClientClick ничего не произойдет. Это также не вызовет никаких ошибок, так как это просто еще один атрибут.
вы можете подтвердить выше, глядя на созданный HTML.
и да,это совсем не интуитивно.
вы правы, это несовместимо. Происходит то, что флажок не имеет события OnClick на стороне сервера, поэтому ваша разметка отображается в браузере. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
в то время как кнопка имеет OnClick-так ASP.NET ожидает ссылку на событие в разметке OnClick.
потому что это два разных вида контроля...
вы видите, ваш браузер не знает о программировании на стороне сервера. он знает только о своем собственном 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...
если вы сомневаетесь, всегда просматривайте источник вывода, когда он отправляется в браузер... существует целый мир отладочной информации, которую вы можете видеть.
я убирал предупреждения и сообщения и вижу, что VS предупреждает об этом: Валидация (ASP.Net): атрибут ' OnClick 'не является допустимым атрибутом элемента'CheckBox'. Используйте элемент управления вводом html для указания обработчика на стороне клиента, и тогда вы не получите дополнительный тег span и два элемента.