私はいくつかのコンテキストから始めます:私は、画面にテキストを表示し、keypressイベントを使用して入力するとwpmを追跡する小さなタイプのアプリケーションを書きました。退屈な状態から私はちょっと試してみたいと思っていました。隠しコマンド(短い矢印キーを使ってkontraコードを短縮する)を入力すると、自動入力する方法がありました。だから私は、私が繰り返す文字の配列を持っているし、私の各ループのkeypressイベントを以下に示すようにシミュレートしようとしている。jQueryのトリガーイベントループ内で複数回
私の問題は、自分のイベントが1回だけトリガしてから再度トリガしないように見えることです。 setTimeout関数は、処理が早すぎる場合に備えて、ループを遅くする初期の試みでした。その後、私はほとんど純粋なjavascript関数(typeIt())関数を実装してキーボードイベントを偽装しました。それは以下の通りです。
function typeIt(character) {
var keyboardEvent = document.createEvent("KeyboardEvent");
var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
console.log(String.fromCharCode(character.charCodeAt(0)) + ' ' + (character.charCodeAt(0)));
keyboardEvent[initMethod](
"keypress", // event type : keydown, keyup, keypress
true, // bubbles
true, // cancelable
window, // viewArg: should be window
false, // ctrlKeyArg
false, // altKeyArg
false, // shiftKeyArg
false, // metaKeyArg
0, // keyCodeArg
character.charCodeAt(0) // charCodeArgs
);
document.dispatchEvent(keyboardEvent);
}
これも一度入力しましたが、間違った文字を入力しているようです。だから私はjQueryトリガを働かせようとすることに戻り、それに固執しました。私はそれを最初の手紙をタイプすることができますが、その後それは完全に発砲を停止するように見えます。私はイベントのトリガーをリセットする可能性があるのかどうか疑問に思っていました。リセットされずにループ内で1回しか起動できない場合、またはそれがここでも問題になっている場合です。
これが何が起こっているのかを見たいと思っているのなら、私はここでモックアップしています(私が実際に取り組んでいることはもうちょっと洗練されたC#アプリですバックエンド):私はシンプルjQuery
クリックイベントでこの問題を持っていた
あなたは '$(文書).one'を使用してイベントリスナーを設定している、[.one](HTTP ://api.jquery.com/one/)は、イベントリスナーを一度だけ使用します。その後、再び呼び出されることはありません。 '.on'を常に使用したい場合は –
@PatrickEvans私はそれを好奇心から.on()に変更しましたが、いくつかの問題がありました。最初の問題は以前と同じ結果だった、最初の文字は正しく入力され、それ以外は何も起こらなかった。 2番目は完全にロックされたページでした。そして第3に、私がon()の代わりに()を使うと、私の元のkeypressイベントが2回発生するので、元のアプリケーションで1つ()を使用しました。 Codepenでそれを変更してから入力すると、そこに問題が表示されます。 – jiggawagga
codepenでシミュレートされたkeypressイベントを使用しようとしていません。しかし、何回呼び出すにしても、「トリガー」を呼び出すとこのイベントがトリガーされます(こちらはデモです)(https://jsfiddle.net/tu4x5bv2/)。だからあなたのコードの他の部分でやっていることは、イベントリスナーをオフにするか、 'trigger'を正しく呼び出さないことです –