javascript代码阻止输入特殊字符以外的内容

2024-01-25

我正在编写一些简单的 JavaScript 来防止在我的表单中输入字符。我到了这个阶段,我能够阻止所有打字,并注意到它阻止了所有字符except特别的,比如å´ˆø`¨

我可以使用以下命令在我的 mac 上输入:[Option]+`+[字母键]

我怎样才能防止这些被输入?

HTML:

<form>
  <input name="myinput"></input>
</form>

JS:

document.querySelector('input').addEventListener('keypress', function (e) {
 e.preventDefault();
 return false; 
});

fiddle: https://jsfiddle.net/6qty7dgr/ https://jsfiddle.net/6qty7dgr/


这是行不通的,因为这些击键实际上启动了作曲事件 https://w3c.github.io/uievents/#events-compositionevents,即 IME 尚未处理完整输入,并且您有“半个字符”。所以打电话preventDefault()这里的 keydown 事件不会阻止输入这半个字符,浏览器无论如何都会将其插入到输入中。

document.querySelector('input').addEventListener('keypress', function (e) {
  e.preventDefault();
});
document.querySelector('input').addEventListener('compositionstart', function (e) {
  console.log("composition start fired");
  e.preventDefault(); // should have worked per specs, but doesn't...
});
  <input name="myinput"></input>

根据规范,您应该能够通过调用来防止这种情况preventDefault() on the compositionstart https://developer.mozilla.org/en-US/docs/Web/API/Element/compositionstart_event确实触发的事件。然而,实际上似乎没有浏览器支持取消此事件,并且似乎对于技术原因 https://crbug.com/706672他们永远不会支持它。然而他们应该支持取消beforeinput https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/beforeinput_event事件,但截至目前,只有 Safari 支持在来自组合事件时取消它...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript代码阻止输入特殊字符以外的内容 的相关文章

随机推荐