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() 或其快捷方法的事件处理程序都会被触发。但是,可以使用 .trigger() 方法手动触发它们。对 .trigger() 的调用以与用户自然触发事件相同的顺序执行处理程序。

因此,如果您使用 jQuery 而不是纯 javascript 附加处理程序,它会按预期工作:

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上。火狐使用initKeyEvent.

更新了 jsFiddle

于 2013-06-20T00:01:01.650 回答