我正在编写一些简单的 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(使用前将#替换为@)