0

私の仕事は完了したと言うことから始めましょう。しかし、私はそれがどのように機能するかを理解しようとしています.1つのことが私を混乱させます. つまり、たまたま答えにたどり着いたのです。

私のタスクは単純でした。入力ボックスで、遅延後に各文字を * に変更することで、ユーザーの入力をマスクします。これは、Android フォンがマスクされた入力を処理する方法であり、iPhone とは少し異なります。

jQuery/javascript と正規表現を組み合わせて使用​​しました。私の作業コード:

$('.room_input').focus(function () {
    currentFocus = $(this);
});

$('.key').click(function () {
    setTimeout(function () {
        currentFocus.val(currentFocus.val().replace(/[^\*]/, '*'));
    }, 2000);
});

とてもシンプルで、うまく機能します。各キーを押すと、2 秒後に * に変わります。各キーは独自のタイマーにあります。しかし、私が理解していない重要なことが1つあります。setTimeout からのコールバックがトリガーされると、上記のコードはテキスト ボックスの内容全体を * に設定するように見えます。上記の「置換」は、値の内容全体を * 以外の任意の文字に置き換えるためです。

しかし、そうではありません。各キーは、クリックされてから 2 秒後に変化します (当然のことです)。何故ですか?私はそれが正規表現である可能性があると考えています-最初に見つかった一致のみを変更しますか? 自分の質問に答えただけですか?

更新:しました。それは正規表現です。文字列内で最初に一致した文字のみを置き換えます。シングルスレッドの問題と何か関係があるのではないかと考えていました...いつものように、問題を実際よりもはるかに難しくしています。:)

4

1 に答える 1

0

はい、あなたは正しいです。

キーをクリックするたびに文字が追加され、タイマーが開始され、後で最初の非アスタリスクがアスタリスクに変わります。予想よりはるかに簡単です。

于 2013-02-14T22:30:35.397 に答える