【发布时间】:2012-05-09 08:15:17
【问题描述】:
我正在尝试做的是将关键代码放在一个数组中,以便以后做一些有趣的事情。因此,我捕获击键,获取插入符号位置并将键代码放入数组中(在 MooTools 的帮助下):
var keyArray = [];
$('form').addEvent('keyup', function(event) {
var pos = document.activeElement.getCaretPosition();
keyArray[pos] = event.code;
});
一般来说,这很好用。但是,当在控制台中显示完整数组时,我注意到数组中有一些 undefined 值。进一步探索这一点,我发现当快速打字时,插入符号的位置似乎失去了轨道,或者反应快/慢。我制作了一个 jsfiddle 来证明这一点:http://jsfiddle.net/HQVR8/1/
如果您在此示例中快速键入,您将看到插入符号位置序列,如
- 1 - 2 - 3 - 5 - 6 - 6.
但是打字慢的时候,就是
- 1 - 2 - 3 - 4 - 5 - 6.
当然,现在快速输入的问题是我的数组中有一个undefined 值,我覆盖了一个数组项。所以结果不一样。
我的问题是我是否可以以某种方式让插入符号位置保持跟踪。我尝试使用“本机”selectionStart,但结果是一样的。我还尝试在keydown 事件中捕获插入符号位置,并将其放入keyup 事件中的数组中。没有不同。我想知道是否使用小暂停(即强迫用户输入更慢)可以解决它,但这感觉就像一个黑客,我更喜欢一个“正确”的解决方案。希望有一个。
【问题讨论】:
-
你为什么要这样做?键码有什么用?
-
我将所有密钥代码加起来,并使用这个数字作为额外的安全措施。关键是我想确保人们正在输入(在这种情况下是密码),所以我会捕获击键(省略功能键等)。总和应该始终相同,但不会公开实际密码(因为其他字母可能加起来相同)。
-
对。那么,您还有其他问题,因为用户可以在您的密码框中使用箭头键或鼠标通过在任何位置插入和删除字符来编辑密码。老实说,我认为这不是首发。
-
这不是问题,因为保存了插入字符的位置。鼠标、选择、箭头键没有区别。
标签: javascript mootools mootools-events