Sto*_*bor 83 javascript asp.net checkbox onclick onclientclick
有谁知道为什么asp:CheckBox的客户端javascript处理程序需要是OnClick =""属性而不是OnClientClick =""属性,对于asp:Button?
例如,这有效:
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
这不(没有错误):
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
但这有效:
<asp:Button runat="server" OnClientClick="alert('Hi');" />
Run Code Online (Sandbox Code Playgroud)
这不会(编译时错误):
<asp:Button runat="server" OnClick="alert('hi');" />
Run Code Online (Sandbox Code Playgroud)
(我知道Button.OnClick用于什么;我想知道为什么CheckBox不能以相同的方式工作......)
Sol*_*ogi 104
这很奇怪.我检查了复选框文档页面读取
<asp:CheckBox id="CheckBox1"
AutoPostBack="True|False"
Text="Label"
TextAlign="Right|Left"
Checked="True|False"
OnCheckedChanged="OnCheckedChangedMethod"
runat="server"/>
Run Code Online (Sandbox Code Playgroud)
如您所见,没有定义OnClick或OnClientClick属性.
记住这一点,我认为这就是正在发生的事情.
当你这样做,
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
ASP.NET不会修改OnClick属性并在浏览器上按原样呈现它.它将呈现为:
<input type="checkbox" OnClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
显然,浏览器可以理解"OnClick"并发出警报.
在这种情况下
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
同样,ASP.NET不会更改OnClientClick属性并将其呈现为
<input type="checkbox" OnClientClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
由于浏览器无法理解OnClientClick,因此不会发生任何事情.它也不会引发任何错误,因为它只是另一个属性.
您可以通过查看呈现的HTML来确认上述内容.
是的,这根本不直观.
因为它们是两种不同的控制方式......
您看,您的Web浏览器不了解服务器端编程.它只知道它自己的DOM和它使用的事件模型......以及呈现给它的对象的点击事件.您应该检查实际从ASP.Net发送到浏览器的最终标记,以查看您自己的差异.
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
呈现给
<input type="check" OnClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
和
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
呈现给
<input type="check" OnClientClick="alert(this.checked);" />
Run Code Online (Sandbox Code Playgroud)
现在,就像我记得的那样,在任何地方都没有任何支持DOM的"OnClientClick"事件的浏览器......
如有疑问,请始终在输出到浏览器时查看输出源...您可以看到整个调试信息世界.
你是对的,这是不一致的.发生的事情是CheckBox没有服务器端OnClick事件,因此您的标记将呈现给浏览器. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
而Button确实有一个OnClick - 所以ASP.NET期望对OnClick标记中的事件的引用.
归档时间: |
|
查看次数: |
171439 次 |
最近记录: |