【发布时间】:2014-03-03 13:53:29
【问题描述】:
是否可以在只接受粘贴输入的表单上进行 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 上做同样的事情显然需要 keydown/up 来检查是否按下了 cmd。这是可行的,但不包含在此代码中,以防其他人希望使用它。
【问题讨论】:
-
我很确定这是可能的,但这将是一个非常糟糕的用户体验。无论如何,大多数用户都会复制/粘贴令牌 ID,那么为什么要为最少的用户付出额外的努力呢?
-
您必须同时允许键盘快捷键粘贴(可能因操作系统而异)和右键单击上下文菜单粘贴。另外,是什么阻止他们粘贴与您的令牌完全不同的东西?
-
他们从哪里获得令牌?
-
@ajp15243 没有什么可以阻止他们粘贴到随机文本中,尽管我们可以强制文本必须恰好是 20 个字符。这是为了防止用户错误地误输入一个(或多个)字母,而这将无法检测到。
-
@DylanStreb 我很确定这是可能的,但需要大量投资和测试以确保它不包含任何隐藏的、大洞。为什么不让他们输入两三次密钥以确保他们没有输入错误呢?如果他们像大多数人一样复制/粘贴,这将很快而且不容易出错。如果他们的打字方式与大多数人不同,那么他们以同样的方式输入错误两到三遍的几率比一次要低得多。
标签: javascript html textfield paste