如何用js 代码禁用键盘某个按键

JavaScript014

如何用js 代码禁用键盘某个按键,第1张

<form>

<input type="text" id="NotInputS" />

</form>

<script>

document.getElementById("NotInputS").onkeypress=function(e){

var keynum=window.event ? e.keyCode : e.which//获取键盘码

var keychar = String.fromCharCode(keynum)//获取键盘吗对应的字符

alert(keynum)

if(keychar=='S' || keychar=='s')//这个实例不能输出S,s

return false//返回false表示不输出此字符

else

return true//true就是输出

}

//请用onkeypress,不要用onkeydown/onkeyup

//除非你不在意字母的大小写

//onkeydown的S与s的按键码是一样的

</script>

以下答案为纯原生(vanilla Javascript)方法,实际可以用react、vue之类的库,通过数据绑定的方法实现这种功能。我用的是ECMAScript6的写法,其中let, const关键字老版本IE可能不识别,可以全部换成var。

在var fir = document.getElementById("fir")语句后面加入

function inputHandler (e) {

  e.target.value = e.target.value.replace(/不/g, '')

}

let _debounceTimerId

function debounce (f, ms) {

  const self = this

  return function() {

      const args = arguments

      _debounceTimerId &&clearTimeout(_debounceTimerId)

      _debounceTimerId = setTimeout(function() {

          f.apply(self, args)

      }, ms)

  }

}

fir.addEventListener('input', debounce(inputHandler, 50))

解释:

1、使用HTMLInputElement实例的input事件,该事件在每次键入后都会触发

2、中文输入法在单次键入后,会多次触发input事件,两次触发间隔大概在1-2ms左右

3、为了防止多次触发,需要使用debounce(不知道怎么翻译,暂且用数字电路的“限制抖动”的概念吧),我上面写了一个我自己编的debounce函数,实际可以用现成的库函数,比如Lodash的_.debounce()

4、debounce(inputHandler, 100) 会保证抖动结束100ms后,运行inputHandler中的语句把"不"字去除。