【问题标题】:Avoid Beep sound when enter keypress in a textbox在文本框中输入按键时避免发出哔声
【发布时间】:2009-01-13 22:51:44
【问题描述】:

当您创建一个 aspx 页面时:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

    </div>
    </form>
</body>
</html>

如何避免在文本框中按 Enter 时发出的哔声。

另一方面,我想处理 enter onkeypress 事件。

发送!

【问题讨论】:

  • 您使用的是什么浏览器、操作系统?
  • Internet Explorer 7.0/8.0Beta 和 Windows Vista SP1 但和浏览器比较相关。
  • 这将是一个网络解决方案,因此我无法为每个用户禁用它。有什么办法可以避免吗?

标签: asp.net javascript onkeypress


【解决方案1】:

首先,在网页的文本框中按 Enter 键时发出哔哔声不是标准行为。试试谷歌的搜索页面,或者试试这个页面底部的名称、电子邮件和主页字段。在任何浏览器中按下回车键时,它们都不会发出哔哔声。

为防止发出哔声,请处理 &lt;INPUT&gt; 标签上的 onKeyDown 事件,如果按下回车键则返回 false:

<input type="text" name="TextBox1" value="" onKeyDown="return StopBeepOnEnter(event)" />

<script type="text/javascript">
    function StopBeepOnEnter(event)
    {
        if (event.keyCode == 13)
        {
            // Do Whatever...

            return false; // This stops the beep
        } 
    }
</script>

这里使用 jQuery 也是一样的(我已经实际测试过了,它为我解决了这个问题):

<script type="text/javascript">
    $("#<%=TextBox1.ClientID %>").keydown(function(event)
    {
        if (event.keyCode == 13)
        {
            // Do Whatever...

            return false; // This stops the beep
        }
    });
</script>

我在这个帖子上找到了解决方案 - 感谢 Tharn Jaggar:

http://codingforums.com/showthread.php?t=36491

【讨论】:

    【解决方案2】:

    这里有几点需要注意...

    1. 如果提交按钮被隐藏或根本没有提交按钮,则会出现警报。如果您像我通常那样手动滚动自己的&lt;a&gt; 按钮,通常会出现这种情况(因为默认的操作系统按钮很难看)。您可能想要研究的一件事是使用&lt;button type="submit"&gt;&lt;/button&gt;,因为您可以为它们设置比标准输入按钮更多的样式,并且它们将有机地处理关键事件。

    2. 如果您在keyupkeydown 上截获keyCode 13,警报仍会出现。我不知道这些事件是什么,但你必须使用keypress。这就是我通常在全局级别使用 jQuery 所做的事情......

      $("input[type=text],input[type=password]").keypress(function(e) {    
        if(e.keyCode == 13) {
          $(this).closest("form").trigger("submit");
          e.preventDefault();
        }
      });
      

      然后在页面级别我捕获提交事件并执行我的验证例程...

      $("form").submit(function(e) {
        var txt = $("#txtUser");
        if(txt.val().length == 0) {
          alert("Who are you?");
          txt.focus();
          e.preventDefault();
        }
      });
      

    【讨论】:

    • 如果有多个文本框且没有提交按钮,似乎会发生这种情况。对我有用的解决方案是专门从按键事件中返回 false。
    • 另一个有趣的事情是,如果表单只有一个文本框,它似乎不会发生。我怀疑这是 HTML 早期版本中 ISINDEX 函数的遗迹,它以特定方式处理单个文本框……很久没有想到了!
    【解决方案3】:

    把它放在你的表单标签onkeypress="if(event.keyCode==13)return false;"

    【讨论】:

      【解决方案4】:

      如果它与您的受众使用的浏览器有关,那么他们已经习惯了这种情况,因为除了您的网站之外,其他所有网站都会发生这种情况。我会说这不值得担心 - 有点像关闭 JavaScript 的人。他们知道他们已将其关闭,因此他们习惯了缺乏某些功能的网站。你不能强迫他们打开它,也不能强迫他们把声音关掉。这是您必须在网络应用中接受的体验之一。

      【讨论】:

      • 也不是我的预期,因为我希望我的所有用户都能获得相同的体验
      • 并非每个站点都会发生这种情况。这是其他响应中解释的页面编码方式的直接结果。
      【解决方案5】:

      您必须在操作系统的声音首选项中将其关闭。这是一个 Internet Explorer 的东西。

      【讨论】:

        【解决方案6】:

        我没有在asp中做过很多事情,但我的第一个想法是它会类似于Winforms应用程序。我解决它的第一步是将键(代码、键码、事件中的任何名称)var 设置为 #0 或 null,以及返回之前在事件调用中的任何 var,例如 e.handled。

        【讨论】:

          【解决方案7】:

          最后,我可以在文本字段或组合或任何组件中按 Enter 键时禁用页面所有组件上的哔声,这是必需的。我所做的是在我的正文标签中添加了 [onkeypress="if(event.keyCode==13)return false;"],如下所示:

             <body onkeypress="if(event.keyCode==13)return false;">
          

          我在我的 GWT GXT 应用程序中使用了上述代码。

          克里山巴巴尔

          【讨论】:

            【解决方案8】:

            KeyPressEvent.preventDefault() 似乎可以在 GWT 中解决问题

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-12-28
              • 1970-01-01
              • 2016-02-22
              • 2012-06-14
              • 1970-01-01
              • 1970-01-01
              • 2019-04-18
              • 1970-01-01
              相关资源
              最近更新 更多