首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >asp的OnClick与OnClientClick :复选框?

asp的OnClick与OnClientClick :复选框?
EN

Stack Overflow用户
提问于 2009-07-16 02:27:32
回答 8查看 185.9K关注 0票数 84

谁知道为什么asp:CheckBox的客户端javascript处理程序需要是一个OnClick="“属性,而不是asp:Button的OnClientClick="”属性?

例如,这是可行的:

代码语言:javascript
复制
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

而这不是(没有错误):

代码语言:javascript
复制
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

但这是可行的:

代码语言:javascript
复制
<asp:Button runat="server" OnClientClick="alert('Hi');" />

而这不是(编译时错误):

代码语言:javascript
复制
<asp:Button runat="server" OnClick="alert('hi');" />

(我知道Button.OnClick是用来干什么的;我想知道为什么CheckBox不能以同样的方式工作……)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-16 02:35:03

这太奇怪了。我检查了CheckBox documentation page,上面写着

代码语言:javascript
复制
<asp:CheckBox id="CheckBox1" 
     AutoPostBack="True|False"
     Text="Label"
     TextAlign="Right|Left"
     Checked="True|False"
     OnCheckedChanged="OnCheckedChangedMethod"
     runat="server"/>

正如您所看到的,没有定义OnClick或OnClientClick属性。

记住这一点,我认为这就是正在发生的事情。

当你这样做的时候,

代码语言:javascript
复制
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

ASP.NET不修改OnClick属性,而是在浏览器上按原样呈现它。它将呈现为:

代码语言:javascript
复制
  <input type="checkbox" OnClick="alert(this.checked);" />

显然,浏览器可以理解“OnClick”并发出警告。

在这个场景中

代码语言:javascript
复制
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

同样,ASP.NET不会更改OnClientClick属性,而是将其呈现为

代码语言:javascript
复制
<input type="checkbox" OnClientClick="alert(this.checked);" />

因为浏览器不会理解OnClientClick,所以什么都不会发生。它也不会引发任何错误,因为它只是另一个属性。

您可以通过查看呈现的HTML来确认上面的内容。

是的,这一点都不直观。

票数 108
EN

Stack Overflow用户

发布于 2009-07-16 02:39:39

因为它们是两种不同的控件。

你看,你的浏览器不知道服务器端编程。它只知道它自己的DOM和它使用的事件模型...并且用于呈现给它的对象的点击事件。您应该检查从ASP.Net实际发送到浏览器的最终标记,以了解您自己的差异。

代码语言:javascript
复制
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

渲染到

代码语言:javascript
复制
<input type="check" OnClick="alert(this.checked);" />

代码语言:javascript
复制
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

渲染到

代码语言:javascript
复制
<input type="check" OnClientClick="alert(this.checked);" />

现在,据我所知,在任何地方都没有浏览器在其DOM中支持"OnClientClick“事件……

如果有疑问,请始终在输出发送到浏览器时查看输出的源...你可以看到整个调试信息的世界。

票数 9
EN

Stack Overflow用户

发布于 2009-07-16 02:34:12

你说得对,这是不一致的。实际情况是,CheckBox没有服务器端的OnClick事件,因此您的标记将呈现给浏览器。http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

而Button确实有一个OnClick -所以ASP.NET希望在你的OnClick标记中引用一个事件。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1135134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档