【问题标题】:How to prevent a semicolon from being entered into html text input, but allowing a colon?如何防止分号进入html文本输入,但允许冒号?
【发布时间】:2018-01-01 20:46:04
【问题描述】:

我想允许输入例如 1:10,但不允许输入 1;10。但是, : 和 ;都对应keyCode 186,所以使用keyCode来防止;输入到我的输入字段中的键不起作用。我还研究了使用 charCodes,但 charCodes 没有 ;或:值。最后,我查看了 ascii 表。它们具有分号和冒号值。我有什么办法可以使用 ascii 表来防止 ;键从输入到我的文本框中,但是允许使用 : 键?还是有另一种方法可以让我这样做?我还考虑过连续检测两个键输入,这样我就可以检测到一个 shift 键输入,但这似乎是一个肮脏的解决方案。

 $("input.form-1").bind({
    keydown: function(e) {
        if(e.which ===186) { //trying to disallow semicolons, which also disallows colons
            return false;
        }
    }
});

【问题讨论】:

  • 尝试检查shiftKey是否关闭
  • 它们都对应于美国国际或美国英语键盘上的 keyCode 186。还有很多其他的键盘布局。使用这种方法可能无法正常工作。

标签: javascript jquery html ascii keycode


【解决方案1】:

就像 Rory 说的,你应该使用on。除了检查 shiftKey,您还可以只检查事件的 key 属性。 MDN KeyboardEvent.key

$("input.form-1").on({
    keydown: function(e) {
        if(e.key === ";") { // disallow semicolon
            return false;
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="form-1" type="text" />

【讨论】:

    【解决方案2】:

    首先,不要使用bind()很久 前它已被弃用。请改用on()

    要解决您的问题,您需要检测shift 键是否被按住,您可以使用事件的shiftKey 属性:

    $("input.form-1").on({
      keydown: function(e) {
        if (!e.shiftKey && e.which === 186) {
          return false;
        }
      }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input class="form-1" type="text" />

    【讨论】:

    • 我想会是!e.shiftKey,因为: 会在shiftKey 宕机时出现,这是他想要允许的!
    • 我想这是一个传统的 querty-ish 键盘。分号和冒号在每个国家/地区总是相同的击键吗?
    • @BuhBuh 我不确定没有测试它,但你是对的,如果需要多语言支持,这是一个问题。我建议在这种情况下使用@SvenTheSurfer 的event.key 方法,假设您不需要支持旧版本的 IE。
    • 在欧洲,许多国家键盘布局在不同的位置都有特殊字符,例如 :;
    • 我更喜欢接受的解决方案,因为它没有使用 shiftKey。不过感谢您的帮助。你的回答也不错。
    【解决方案3】:

    您只需尝试e.keycode :58 和 ; 59 的键码。如果您想要任何字母或符号的键码,您只需在提及代码下方的文本中输入。

    <html>
    <body>
    
    <input type="text" size="40" onkeypress="myFunction(event)">
    
    <p id="demo"></p>
    <script>
    function myFunction(event) {
        var x =  event.keyCode;
        document.getElementById("demo").innerHTML =  x;
    }
    </script>
    
    
    </body>
    </html>

    【讨论】:

    • 请注意,这里的 keyCode 不同,因为您使用的是过时的 on* 事件属性 - 这本身就是一个坏主意。在不显眼的处理程序或 jQuery 中,键码是 186 (jsfiddle.net/5u8czo29),因为正确使用了 OP
    • 每种类型的事件处理程序是否有多个 keyCode 定义?我看到有些人使用 59 作为 keyCode ;和其他人使用 186
    【解决方案4】:

    在 if 条件下检查 keycode 和 key。

    $("input.form-1").on({
        keydown: function(e) {
            if(e.key === ";") { // disallow semicolon
                return false;
            }
        }
    });
    

    【讨论】:

    • 为什么要同时检查?你不信任e.key === ";"
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多