自动回传防止按钮点击

7
我有一个asp.net页面,上面有很多控件,包括:
  1. 一个带有autopostback=true并实现了textchanged服务器端事件的文本框

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

当用户离开文本框时(即失去焦点),文本框会立即执行postback。问题在于,如果用户在不离开文本框的情况下改变值然后按下按钮,那么在按钮单击时,文本框将执行postback,但按钮单击事件将丢失。
如何才能强制在这种情况下连续触发文本框和按钮事件呢?
谢谢

用户如何在不离开文本框的情况下点击按钮?按钮点击总是会强制使焦点离开文本框并将焦点设置到按钮上...您可以尝试在请求之前添加一些延迟... - Arsen Mkrtchyan
我的意思是他在按按钮之前没有离开文本框。也就是说,他一旦点击按钮,焦点就会丢失并且文本框会自动提交。但是按钮单击事件不会触发。 - user1365247
为两个控件赋予相同的事件名称。 - Ramesh Rajendran
2个回答

1
尝试:
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)
    {

    }

0
你可以延迟文本框的回传,如果按钮被点击则可以取消它。为此,请将下面的代码添加到 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, ""));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接