Asp.net

OnClick 與 OnClientClick 的 asp:CheckBox?

  • July 16, 2009

有誰知道為什麼 asp:CheckBox 的客戶端 javascript 處理程序需要是 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 不能以同樣的方式工作……)

這很奇怪。我檢查了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 來確認上述內容。

是的,這根本不直覺。

引用自:https://stackoverflow.com/questions/1135134