禁止在HTML文本框中输入撇号

4

我正在寻找一个简单的JS脚本,可以禁止在KeyUp或OnKeyPress时输入撇号。例如,每当用户按下键盘时,如果输入的是撇号(Jame's Pizza),则将其替换为空格。我不想在PHP中处理它。
我找到了一段代码,但它将JS绑定到了文本字段“Name”,而我不想这样做。我需要一个全局的解决方案。


展示你找到的代码,我们可以帮助你进行适应。你所说的“全局变量”是什么意思? - Bergi
"我不想在PHP中处理它。" 由于无法信任用户输入,您还需要在PHP中处理它。 - Mike Samuel
2个回答

7

预防按键操作总是比事后删除更好。要做到这一点,您需要拦截 keypress 事件 (keyup 太晚了):

document.getElementById('yourTextBoxID').onkeypress = function () {
    if (event.keyCode === 39) { // apostrophe
        // prevent the keypress
        return false;
    }
};​

如果你只想阻止 ' 出现在框中,但希望 keypress 事件传播到父元素,请将 return false; 替换为 event.preventDefault();。(评论区的 Eivind Eidheim Elseth 建议)

http://jsfiddle.net/TSB9r/


1
使用event.preventDefault()而不是return false可能更符合惯用语。 - Eivind Eidheim Elseth
@EivindEidheimElseth,它们执行不同的操作 - return false 相当于调用了 preventDefault stopPropagation - jbabey
@NickBeranek 键码根据您是在keyup/down还是keypress模式下而不同,请参见http://www.asquare.net/javascript/tests/KeyCode.html(非常烦人,我知道)。本质上,`keypress`的键码会考虑到修改器(在此情况下为Shift键),而keyup/down则不会。 - jbabey

0
请查看以下函数。它会获取页面上所有的input元素,并为每个元素分配keydownkeyup事件处理程序。如果检测到撇号,它将调用preventDefault()方法。
function listen(event, elem, func) {
  if (elem.addEventListener) return elem.addEventListener(event, func, false);
  else elem.attachEvent('on' + event, func);
}

listen('load', window, function() {
  var inputs = document.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i += 1) {
    keyHandler(i);
  }
  function keyHandler(i) {
    listen('keydown', inputs[i], function(e) {
      if (e.keyCode === 222) { // 222 is the keyCode for apostrophe
        e.preventDefault();
      }
    });
    listen('keyup', inputs[i], function(e) {
      if (e.keyCode === 222) { // 222 is the keyCode for apostrophe
        e.preventDefault();
      }
    });
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接