首先让我说我的任务已经完成。但我试图了解它是如何工作的,有一件事让我感到困惑。换句话说,我偶然发现了答案。
我的任务很简单:在输入框中,通过在延迟后将每个字符更改为 * 来屏蔽用户键入的输入。这就是安卓手机处理屏蔽输入的方式,与 iPhone 略有不同。
我使用了 jQuery/javascript 和正则表达式的组合。我的工作代码:
$('.room_input').focus(function () {
currentFocus = $(this);
});
$('.key').click(function () {
setTimeout(function () {
currentFocus.val(currentFocus.val().replace(/[^\*]/, '*'));
}, 2000);
});
这很简单,而且效果很好。每按一次键,2 秒后变为 *。每个键都有自己的计时器。但是有一件主要的事情我不明白。当来自 setTimeout 的回调触发时,上面的代码似乎会将文本框的全部内容设置为 *。因为上面的“replace”用任何不是*的字符替换了值的全部内容。
但事实并非如此。每个键在单击后 2 秒后发生变化(应该如此)。这是为什么?我在想它可能是正则表达式 - 它只会改变它找到的第一个匹配项吗?我只是回答了我自己的问题吗?
更新:我做到了。这是正则表达式。它只替换字符串中第一个匹配的字符。我在想这可能与单线程问题有关......像往常一样,我让一个问题比它更困难。:)