当用户在文本框中按下回车键时,触发按钮点击事件。

42
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Send" />
</ContentTemplate>
</asp:UpdatePanel>

当用户在Textbox1中按下Enter键时,我需要执行Button1的点击事件。


最好定义一个函数,该函数将在点击和按键事件上被调用。 - Badr
如果你把它放在一个表单标签里,那么它会自动发生,对吧? - Ruben
7个回答

100

将表单放在一个ASP.NET面板控件中,并使用您的按钮ID设置其defaultButton属性。请参见下面的代码:

  <asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
         <ContentTemplate>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Send" />
             </ContentTemplate>
          </asp:UpdatePanel>
    </asp:Panel>

希望这可以帮助您...


1
这是一个很好的解决方案。但是,需要 .Net 2.0 或更高版本。 - Mark Micallef
2
面板也可以很好地转换为div,所以只需用它替换我的div并放入正确的cssclass即可。像魔术般运作。 - Brent
2
更喜欢这个答案,非常简单。 - Phil_12d3
@Black Canery,只需要面板。我只是使用了问题中的代码。 - Harun
@Harun 如果文本框在按钮上方,也就是说不在一起,那么我们怎么做才能达到相同的效果呢? - Jyotish Singh
显示剩余2条评论

15
在aspx页面的加载事件中,向文本框添加一个onkeypress
this.TextBox1.Attributes.Add(
    "onkeypress", "button_click(this,'" + this.Button1.ClientID + "')");

然后加入这段Javascript来检测按键事件,如果是"enter"键,则触发右侧按钮的点击事件。

<script>
    function button_click(objTextBox,objBtnID)
    {
        if(window.event.keyCode==13)
        {
            document.getElementById(objBtnID).focus();
            document.getElementById(objBtnID).click();
        }
    }
</script>

2
注意,在 Firefox 中会发出“window.event 未定义”的警告。 - Adrian Marinica
这个问题该如何修复?@AdrianMar - SearchForKnowledge
这对我没有用:http://stackoverflow.com/questions/27255385/how-to-prevent-the-trigger-of-another-button?noredirect=1#comment43006332_27255385 - SearchForKnowledge
12
这是一个丑陋的hack。正确答案应该是获得更多赞同票的那个。 - Timwi
1
这不是正确的解决方案。请使用另一个答案中列出的DefaultButton想法。 - Mike Fulton

9

Codeproject有完整的解决方案:

http://www.codeproject.com/Articles/17241/Capturing-the-Enter-key-to-cause-a-button-click

正如文章所说:“决定哪种解决方案最适合您的需求”。

=================== 编辑后的答案 ============================

上面提到的链接介绍了两种捕获“回车键”事件的方法:

Javascript(将onKeyPress事件绑定到对象,并创建一个javascript函数来检查按下了哪个键并执行你的逻辑)

_Page_Load 中的代码:

 //Add the javascript so we know where we want the enter key press to go
if (!IsPostBack)
{
   txtboxFirstName.Attributes.Add("onKeyPress", 
                   "doClick('" + btnSearch.ClientID + "',event)");
   txtboxLastName.Attributes.Add("onKeyPress", 
                  "doClick('" + btnSearch.ClientID + "',event)");
}

Javascript代码:

<SCRIPT type=text/javascript>
    function doClick(buttonName,e)
    {
        //the purpose of this function is to allow the enter key to 
        //point to the correct button to click.
        var key;

         if(window.event)
              key = window.event.keyCode;     //IE
         else
              key = e.which;     //firefox

        if (key == 13)
        {
            //Get the button the user wants to have clicked
            var btn = document.getElementById(buttonName);
            if (btn != null)
            { //If we find the button click it
                btn.click();
                event.keyCode = 0
            }
        }
   }
</SCRIPT>

面板控件

<asp:Panel ID="panSearch" runat="server" DefaultButton="btnSearch2" Width="100%" >
    <asp:TextBox ID="txtboxFirstName2" runat="server" ></asp:TextBox>
</asp:Panel>

引用:

请注意,Panel标签有一个名为DefaultButton的属性。您可以将此属性设置为要在按Enter键时单击的按钮的ID。因此,Panel内的任何文本框都将将其Enter键按下事件定向到Panel的DefaultButton属性中设置的按钮。


1
鼓励提供外部资源的链接,但请添加链接周围的上下文,以便其他用户了解它是什么以及为什么存在。在引用重要链接时,请引用最相关的部分,以防目标站点无法访问或永久离线。- 如何撰写一个好的答案? - Albireo
@Albireo 我编辑了答案,希望这会有所帮助 :) - lienysd

2
在HTML代码中,只需要添加一个包含页面控件的面板。在面板内部,添加一行DefaultButton="buttonNameThatClicksAtEnter"。请参考下面的示例,不需要其他任何操作。
<asp:Panel runat="server" DefaultButton="Button1"> //add this!
  //here goes all the page controls and the trigger button
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Send" />
</asp:Panel> //and this too!

0

你可以使用JavaScript / jQuery来完成:

<script>
    function runScript(e) {
        if (e.keyCode == 13) {
            $("#myButton").click(); //jquery
            document.getElementById("myButton").click(); //javascript
        }
    }
</script>

<asp:textbox id="txtUsername" runat="server" onkeypress="return runScript(event)" />

<asp:LinkButton id="myButton" text="Login" runat="server" />

-1
你可以尝试:
在HTML中:
    <asp:TextBox ID="TextBox1" runat="server" onKeyDown="submitButton(event)"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

还有 JavaScript:

function submitButton(event) {
        if (event.which == 13) {
            $('#Button1').trigger('click');
        }
    }

代码后台:

protected void Button1_Click(object sender, EventArgs e)
{
        //load data and fill to gridview
} // fixed the function view for users

希望这可以帮到你


1
“onKeyDown”不就是控件的“textChanged”事件吗?这意味着每输入一个字符,按钮都会被点击一次,即使你使用if语句来确定按下了哪个键也可能会出问题。其他解决方案更好。 - Malachi

-3

仅提供链接的答案对我们的网站来说不太安全。 - Malachi

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