asp.net - OnClick 与 OnClientClick 的 asp :CheckBox?

标签 asp.net javascript checkbox onclick onclientclick

有谁知道为什么 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 documentation page上面写着

<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 来确认以上内容。

是的,这根本不直观。

关于asp.net - OnClick 与 OnClientClick 的 asp :CheckBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135134/

相关文章:

Asp.net mvc3 : How to pull data from database and fill view model in one goal?

javascript - stopPropagation如何取消preventDefault?

javascript - angularjs 无法读取未定义的属性

javascript - 我的第 5 个标记没有显示,有什么问题吗?

javascript - 变量中的 jQuery 选择器 - 计算选中的复选框

javascript - 依赖复选框,你认为这个可以更简化吗?

c# - ria 服务服务器端数据结构 : is it shared between threads

javascript - 没有asp.net开发人员遇到过的复杂情况

android - 如何使用一项 Activity 中的复选框设置不同的布局?

c# - 存储临时数据的最有效方法是什么