在表单中是否可以使用HTML输入框只接受粘贴的内容?
在我们的注册流程中,终端用户需要在基本的HTML输入表单中输入一个20个字符的标识令牌。理想情况下,用户只需将标识令牌复制/粘贴到相应的字段中即可。我们不希望允许用户手动输入此内容,因为他们很可能会输错字母,并且我们没有任何可靠的手段来验证输入。
该令牌来自桌面软件,需要粘贴到已经打开的网页中(即他们从中下载软件的网页)。因此,可点击的链接并不是一种可行的选择。
有没有什么方法可以实现这一点,例如通过Javascript?谢谢。
我的解决方案,修改自SimplePi的答案:
<html>
<body>
<script type="text/javascript">
function validate(evt) {
var theEvent = evt || window.event;
var key = theEvent.charCode || theEvent.which;
if(key >= 32 && (theEvent.ctrlKey === undefined || !theEvent.ctrlKey)) {
if(theEvent.preventDefault) theEvent.preventDefault();
else theEvent.returnValue = false;
}
}
</script>
<span>Textbox name</span> <br />
<input type="text" onkeypress='validate(event)' value=""/>
</body>
</html>
这段代码在某些浏览器中可以正常使用,但并非所有浏览器都支持。我发现Mac上的Firefox是唯一有问题的浏览器——Firefox通常将ctrl-v
报告为与v
完全相同,但在Windows上,theEvent.ctrlKey
成员可以区分这两者。在Mac上执行相同操作显然需要使用按键按下/释放事件来检查是否按下cmd键。虽然这是可行的,但本代码未包含此功能,以便其他人希望使用时进行自行添加。