30

我发现了一些类似的指令,但没有任何帮助,所有这些指令要么用于特殊字符,要么用于数字。

我只需要让用户输入 1 , 2 , 3, 4, 5, N, O, A, B, C 。所有其他字符都应受到限制。

有什么方法可以让我自己选择限制/允许的输入字符?

  • 对javascript不是很熟悉。
4

7 回答 7

29

使用 JQuery,

$("input").keypress( function(e) {
    var chr = String.fromCharCode(e.which);
    if ("12345NOABC".indexOf(chr) < 0)
        return false;
});

没有 JQuery

document.getElementById("foo").onkeypress = function(e) {
    var chr = String.fromCharCode(e.which);
    if ("12345NOABC".indexOf(chr) < 0)
        return false;
};

对于一个班轮,来自@mplungjan 和@matthew-lock 的评论

document.querySelector("#foo").onkeypress = function(e) {
    return "12345NOABC".indexOf(String.fromCharCode(e.which)) >= 0;
};
于 2013-02-11T05:22:44.543 回答
22

尝试这个

$(function(){
  $('#txt').keypress(function(e){
    if(e.which == 97 || e.which == 98 || e.which == 99 || e.which == 110 || e.which == 111 || e.which == 65 || e.which == 66 || e.which == 67 || e.which == 78 || e.which == 79 || e.which == 49 || e.which == 50 || e.which == 51 || e.which == 52 || e.which == 53){
    } else {
      return false;
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='txt' value='' onpaste="return false" />

2018 年 3 月 9 日更新

$(function(){
  $('#txt').keypress(function(e){
    // allowed char: 1 , 2 , 3, 4, 5, N, O, A, B, C
    let allow_char = [97,98,99,110,111,65,66,67,78,79,49,50,51,52,53];
    if(allow_char.indexOf(e.which) !== -1 ){
      //do something
    }
    else{
      return false;
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='txt' value='' onpaste="return false" />

2020 年 11 月 25 日更新

let textarea = document.getElementById('txt');

textarea.addEventListener('keydown', (e) => {
  if(['1','2','3','4','5', 'N', 'O', 'A', 'B', 'C'].indexOf(e.key) !== -1){
    // do something
  } else {
    e.preventDefault();
  }
});

CodePen 演示

于 2013-02-11T05:26:03.110 回答
5

您是否要限制使用无效值提交的表单,或者从字面上阻止用户甚至输入这些值,这并不是 100% 清楚的。其他答案涉及后者,我认为这就是您的意思,但是会有人(像我一样)到达这里,他们只想阻止表单提交。

在这种情况下:

在元素上使用pattern属性:input

<input pattern="[REGEX HERE]">

https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation

https://regex101.com/

于 2018-07-05T11:58:53.793 回答
2

html

<input type="text" name="" value="" id="testr">
<script type="text/javascript" src="testkeydown.js"></script>

javascript

document.getElementById('testr').addEventListener('keydown', function(e) {
    const regex = RegExp('[0-9a-zA-Z]');

    if (!regex.test(e.key) && e.key != 'backspace') {
        e.preventDefault();
    }
});

在上面的代码示例中,您会看到一段代码禁用了普通 js 中大多数不在 0-9、az、AZ 之间的字符。

如果你想更多地研究它,你可以谷歌 mdn keydown 事件并寻找 Morzilla 开发者网络。

于 2019-03-20T14:57:04.323 回答
2

如果您想禁用输入字段中的几个字符,您可以执行以下操作:

<input type="text" onkeydown="return (event.keyCode!=86);"/>

86 是 V 的代码。从以下链接检查其他键的代码。

https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

于 2017-05-28T15:33:03.283 回答
0

使用模式属性

它不会阻止用户输入不需要的字符,但是当他们提交表单时,您甚至可以自定义一个简洁的错误消息。请参阅下面的代码:
<input pattern="[1-5A-CNO].*" title="You can only use the following characters: 1 , 2 , 3, 4, 5, N, O, A, B, C">

源/沙箱试用: https ://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_pattern

于 2021-02-02T15:53:51.677 回答
0

如果有人正在寻找纯 js 解决方案:您需要像这样阻止 onkeydown 事件的密钥

HTML

<input type="text" name="" value="" onkeydown="preventSomeKeys(event)">

Javascript

function preventSomeKeys(event){
  var keyCode = event.keyCode
  if([97,98,99,110,111,65,66,67,78,79,49,50,51,52,53].includes(keyCode)){
     return false;
  }
}
于 2020-06-05T08:34:00.223 回答