事件处理程序没有拾取Keydown事件

时间:2013-06-19 23:51:16

标签: javascript jquery

我想弄清楚为什么以下不起作用。

我正在设置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/

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

jQuery的trigger only triggers jQuery-attached events。触发实际的DOM事件比较棘手,键盘事件模块仍然是工作草案:

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

initKeyboardEvent的论据在MSDN上。 Firefox使用initKeyEvent

Updated jsFiddle