0

私のJavaScriptでは、キーボードイベントをキャッチする必要があります。
ただし、特定のキーが押されると、ブラウザには特定のアクションがあります。たとえば、バックスペースが押された場合は前のページに移動し、spacebarが押された場合はページの一番下までスクロールします。

たとえば、keydownイベントをキャッチしてを呼び出すことで、これらのブラウザアクションを停止できますevent.preventDefault()。ただし、イベントを呼び出すとevent.preventDefault()、イベントは発生しません。keydownkeypresskeyup

keydownイベントのデフォルトのブラウザ動作をブロックし、リリースされたときに同じキーをキャッチできるようにする必要があります。これどうやってするの?

4

1 に答える 1

3

ただし、keydown イベントで event.preventDefault() を呼び出すと、keypress および keyup イベントは発生しません。

イベント自体をキャンセルしたのではなく、ブラウザのデフォルト アクション (つまり、デフォルトで登録されたイベントハンドラー)を preventDefault でキャンセルしただけです。右?イベント keyup と keypress はまだ残っていますが、おそらくイベント ハンドラーがないだけです。完全!したがって、もちろん「何も起こらない」- 「keydown」イベントの場合と同様に、デフォルトのイベントハンドラーを削除しました。おそらく、キーアップおよびキープレスイベントに登録された他のイベントハンドラーがなかったため、アクション (ハンドラー) はもうありませんでしたもう発射する!

したがって、同じイベント キーダウン ハンドラーから、 を呼び出した直後に、たとえば次のようevent.preventdefault()に言うことができます。$('#whatever').on('keyup',function(){console.log('key is up now')})つまり、同じキーダウンハンドラーから任意の関数にキーアップを直接バインドするだけで、キーが上がると、そのイベントにバインドした関数 (つまり、イベントハンドラー) が実際に起動するはずです。

于 2012-09-10T13:35:07.483 に答える