【问题标题】:Autopostback prevents button click自动回发防止按钮点击
【发布时间】:2013-11-02 20:21:37
【问题描述】:

我有一个 asp.net 页面,上面有许多控件,包括:

  1. 一个带有autopostback = true的文本框和实现了服务器端textchanged事件

  2. 实现了服务器端点击事件的按钮

一旦用户离开控件(即失去焦点),文本框就会执行回发。问题是,如果用户碰巧更改了值,然后在没有离开文本框的情况下按下按钮,那么在单击按钮时,文本框将执行回发,但按钮单击将丢失。

在这种情况下如何强制文本框和按钮事件连续触发?

谢谢

【问题讨论】:

  • 用户如何在不离开文本框的情况下单击按钮?按钮单击始终强制将焦点留在文本框上并将焦点设置为按钮...您可以尝试在请求之前添加一些延迟...
  • 我的意思是他在按下按钮之前没有离开文本框。即,只要他单击按钮,焦点就会丢失并且文本框自动回发。但是按钮点击事件不会触发
  • 为两个控件指定相同的事件名称

标签: c# html asp.net events


【解决方案1】:

您可以延迟文本框的回发并在单击按钮时取消它。为此,请将以下代码添加到 Page_PreRender 方法中:

protected void Page_PreRender(object sender, EventArgs e)
{
    Button1.OnClientClick = string.Format("if(window.{0}Timeout){{ clearTimeout(window.{0}Timeout); }}", 
        TextBox1.ClientID);

    TextBox1.Attributes["onChange"] = string.Format("javascript:window.{0}Timeout = setTimeout(\"{1}\", 500); return;", 
        TextBox1.ClientID, 
        ClientScript.GetPostBackEventReference(TextBox1, ""));
}

【讨论】:

    【解决方案2】:

    试试:

    ASPX:

    <asp:TextBox ID="TextBox1" clientidmode="Static" runat="server" onkeypress="return EnterEvent(event)"></asp:TextBox>    
    <asp:Button ID="Button1" runat="server" style="display:none" Text="Button" />
    

    JS:

    function EnterEvent(e) {
            if (e.keyCode == 13) {
                __doPostBack('<%=Button1.UniqueId%>', "");
            }
        }
    

    CS:

    protected void Button1_Click1(object sender, EventArgs e)
        {
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多