OnClick против OnClientClick для жереха: CheckBox?

голоса
81

Кто-нибудь знает, почему на стороне клиента Javascript обработчик для жереха: CheckBox должен быть OnClick = «» атрибут, а не OnClientClick = «» атрибут, как и для жереха: 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 не работает точно так же ...)

Задан 16/07/2009 в 03:27
источник пользователем
На других языках...                            


8 ответов

голоса
8

Вы правы , это несовместимо. То , что происходит в том , что CheckBox не имеет на стороне сервера OnClick событие, поэтому разметка визуализируется в браузере. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

В то время как кнопка действительно имеет OnClick - так ASP.NET ожидает ссылку на событие в вашей OnClick разметки.

Ответил 16/07/2009 в 03:34
источник пользователем

голоса
98

Это очень странно. Я проверил страницу документации CheckBox , которая гласит

<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.

И да, это не интуитивно вообще.

Ответил 16/07/2009 в 03:35
источник пользователем

голоса
8

Потому что это два разных вида контроля ...

Вы видите, ваш веб-браузер не знает о программировании на стороне сервера. он знает только о его собственной 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 ...

Если вы сомневаетесь, всегда просмотреть исходный код выхода, как он отправляется в браузер ... есть целый мир отладки информации, которую вы можете увидеть.

Ответил 16/07/2009 в 03:39
источник пользователем

голоса
1

Я очистки предупреждения и сообщения и видеть, что VS делает предупредить об этом: Проверка (ASP.Net): Атрибут «OnClick» не является допустимым атрибутом элемента «CheckBox». Используйте контроль ввода HTML, чтобы указать на стороне клиента, обработчик и тогда вы не получите дополнительный тег диапазона и два элемента.

Ответил 03/10/2010 в 21:56
источник пользователем

голоса
5

Для тех из вас , кто был здесь ищет на стороне сервера OnClickобработчика этоOnCheckedChanged

Ответил 29/11/2012 в 17:00
источник пользователем

голоса
-1

Одно из решений с JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Ответил 19/01/2015 в 16:17
источник пользователем

голоса
0

Вы можете сделать тег, как это:

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

.Checked свойство в вызываемом JavaScript будет правильно ... текущее состояние флажка:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Ответил 14/02/2018 в 21:28
источник пользователем

голоса
0

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 = «ложный» в заголовке страницы.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Ответил 19/12/2018 в 12:29
источник пользователем

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