1

以下が機能しない理由を理解しようとしています。

keydownイベントハンドラーを設定してから、イベントをトリガーしています。しかし、ハンドラーはそれを検出しません。

誰かが私を啓発できるなら!

function onKeyDown(event)
{
 alert('keydown');   
}

document.addEventListener('keydown', onKeyDown, false);

var keydown = jQuery.Event('keydown', {which:38, keyCode:38});

$(document).keydown();
$(document).trigger(keydown);

jsfiddle: http://jsfiddle.net/4bf3z/

4

2 に答える 2

1

http://api.jquery.com/trigger/から、強調が追加されました:

対応するイベントが発生すると、.on() またはそのショートカット メソッドの 1 つに関連付けられたイベント ハンドラーがトリガーされます。ただし、.trigger() メソッドを使用して手動で起動できます。.trigger() への呼び出しは、イベントがユーザーによって自然にトリガーされた場合と同じ順序でハンドラーを実行します。

したがって、純粋な javascript の代わりに jQuery を使用してハンドラーをアタッチすると、期待どおりに動作します。

function onKeyDown(event)
{
  alert('keydown');   
}

$(document).on('keydown', onKeyDown);    //   <----

var keydown = jQuery.Event('keydown', {which:38, keyCode:38});

$(document).keydown();
$(document).trigger(keydown);
于 2013-06-20T00:01:00.683 に答える
1

jQuerytrigger は、jQuery に関連付けられたイベントのみをトリガーします。実際の DOM イベントのトリガーはよりトリッキーで、キーボード イベント モジュールはまだ作業中のドラフトです。

var e = document.createEvent('KeyboardEvents');
e.initKeyboardEvent('keydown');
document.dispatchEvent(e);

への引数initKeyboardEventMSDNにあります。Firefox はinitKeyEvent.

更新されたjsFiddle

于 2013-06-20T00:01:01.650 に答える