【问题标题】:how to make onchange event happened in code-behind in ASP.NET?如何使 onchange 事件发生在 ASP.NET 的代码隐藏中?
【发布时间】:2013-01-07 18:21:08
【问题描述】:

假设我有一个文本框 Mytbx,并且我有一个用于其 onchange 事件的 javascript。我将它连接到 Page_Load 事件后面的代码中,例如:

Mytbx.Attributes.Add("onchange", "test();")

然后我更改了此文本框的代码隐藏文本,例如(在按钮单击事件中):

Mytbx.Text = MyValue

我希望 onchange 事件被触发。但实际上,并非如此。当我单击按钮更改 Mytbx 的值时,没有任何反应。

如何解决这个问题?

【问题讨论】:

  • 你的文本框是服务器控件还是 HTML 控件?
  • 为什么更改服务器上的文本会触发客户端javascript事件?

标签: javascript asp.net


【解决方案1】:

只有当您直接输入内容并离开文本框时,才会在客户端触发onchange。因此,当您在后面的代码中设置文本框值时,什么都不会发生。

如果您想在客户端处理文本更改事件:

<script>  
     function test(txt){
         alert(txt.value);
     };
</script>

<asp:TextBox ID="txt" runat="server" onchange="test(this);"></asp:TextBox>

如果您想在服务器端处理文本更改事件,您可以这样做:

HTML:

<asp:TextBox ID="txt" runat="server" OnTextChanged="txt_OnTextChanged" AutoPostBack="true"></asp:TextBox>

CS:

protected void txt_OnTextChanged(object sender, EventArgs e)
{
     // Do something
}

【讨论】:

  • 有没有办法防止委托背后的代码通过 JS 的 onChange() 方法触发?
【解决方案2】:

您正在混合客户端和服务器处理。如果您更改服务器上的文本框,则没有客户端代码可以运行,因为您还没有发回表单。如果您在服务器上更改某些内容时必须运行 javascript 代码,则需要注册该 Javascript 函数以在回发完成后页面加载时运行。看看这个:http://msdn.microsoft.com/en-us/library/system.web.ui.page.registerstartupscript(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2011-01-27
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多