的OnClick VS的OnClientClick为一个asp:复选框?(OnClick vs On

2019-06-26 02:16发布

没有人知道为什么一个客户端进行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是什么,我不知道为什么复选框不相同的方式工作...)

Answer 1:

这是非常奇怪的。 我检查了复选框文档页面读取

<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呈现上述确认。

是的,这是不直观的。



Answer 2:

因为它们是两个不同类型的控件...

你看,你的浏览器不知道服务器端编程。 它只知道它自己的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 ...

如有疑问,请随时查看输出的来源,因为它是发送到浏览器...有调试信息,你可以看到整个世界。



Answer 3:

你说得对,这是不一致的。 正在发生的事情是,复选框没有一个服务器端onclick事件,使您的标记被呈现给浏览器。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

而巴顿确实有一个的OnClick - 所以ASP.NET预计在你的OnClick标记为事件的参考。



Answer 4:

对于那些你们谁到这里寻找服务器端OnClick处理程序是OnCheckedChanged



Answer 5:

我被清理警告和信息,并看到VS并警告一下:验证(ASP.Net):属性的“onClick”不是元素“复选框”的有效属性。 使用HTML输入控件来指定一个客户端处理程序,然后你不会得到额外的跨度标签和两个元素。



Answer 6:

你可以这样做标签:

<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />

在JavaScript调用的.checked属性将是正确的...复选框的当前状态:

  function checkchanged(obj) {
      alert(obj.checked)
  }


Answer 7:

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


Answer 8:

一个解决方案是使用jQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);


文章来源: OnClick vs OnClientClick for an asp:CheckBox?