没有人知道为什么一个客户端进行ASP JavaScript处理:复选框需要有一个onclick =“”属性,而不是一个的OnClientClick =“”属性,为ASP:按钮?
例如,这工作:
<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是什么,我不知道为什么复选框不相同的方式工作...)
这是非常奇怪的。 我检查了复选框文档页面读取
<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呈现上述确认。
是的,这是不直观的。
因为它们是两个不同类型的控件...
你看,你的浏览器不知道服务器端编程。 它只知道它自己的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 ...
如有疑问,请随时查看输出的来源,因为它是发送到浏览器...有调试信息,你可以看到整个世界。
你说得对,这是不一致的。 正在发生的事情是,复选框没有一个服务器端onclick事件,使您的标记被呈现给浏览器。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
而巴顿确实有一个的OnClick - 所以ASP.NET预计在你的OnClick标记为事件的参考。
对于那些你们谁到这里寻找服务器端OnClick
处理程序是OnCheckedChanged
我被清理警告和信息,并看到VS并警告一下:验证(ASP.Net):属性的“onClick”不是元素“复选框”的有效属性。 使用HTML输入控件来指定一个客户端处理程序,然后你不会得到额外的跨度标签和两个元素。
你可以这样做标签:
<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />
在JavaScript调用的.checked属性将是正确的...复选框的当前状态:
function checkchanged(obj) {
alert(obj.checked)
}
Asp.net复选框不支持方法的OnClientClick。
如果你想添加一些JavaScript事件到ASP:复选框您必须添加的“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
一个解决方案是使用jQuery:
$(document).ready(
function () {
$('#mycheckboxId').click(function () {
// here the action or function to call
});
}
);