想让网站所有input都不能输入特殊字符

新手上路,请多包涵

想让网站所有input都不能输入特殊字符,因为网站有多处都有input输入框,希望能统一定义input能都不能输入特殊字符,不想用onkeyup一个个去定义修改所有的input,一个个改没办法,量太大了,谁能帮帮我,感谢,应该用js可以,不过我找过js,也要写入ID什么的才能定义,能统一写一个,网站现在是没有统一的名称

阅读 2.8k
5 个回答

如果觉得 input 太多的话,不妨监听在 document

document.addEventListener('keydown', ev => {
    if(ev.target.tagName === 'INPUT') {
        // input输入框
    }
})

原生js吗?
特殊字符太多了,建议可以想想你的input里都允许输入什么字符。
然后写一个公共js文件在body标签之后引入。
这个文件中利用

const inputs = document.getElementsByTagName('input')
for (let i = 0; i < inputs.length; i++) {
  // 为每个input标签都注册失去焦点的事件
  inputs[i].oninput = inputVal 
}
function inputVal () {
  if (this.value不是你想要的字符) {  // 可以用正则判断,也可以找到特殊字符的那些keyCode
    // 处理非法字符的语句
    // 利用this可以指向触发事件的那个input
  }
}

这样就可以实现进入每个页面都使所有input标签生效并处理输入非法内容了,如果你觉得input事件触发太激烈,可以用change事件
这样写既不用在input上写id,也不用你一个一个加,写在公共文件中每个页面都引入就行

document.querySelectorAll("input").forEach(el => {
  el.addEventListener("keydown",e => {
    if(/[^a-zA-Z0-9]/.test(e.key)){
      // 输入了非数字和字母
      el.blur();
      console.log(e.key, "非法")
    } else {
      console.log(e.key)
    }
  })
})

每进入一个页面在所有 DOM 加载完成后执行一遍这个方法。

document.querySelectorAll("input")就能统一所有的input

可以用 replace()正则去匹配

 @input="value = value.replace(/[^\d]/g, '')"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题