Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript与jQuery的等价物';s keyup()和keydown()_Javascript_Jquery_Html_Css_Keypress - Fatal编程技术网

JavaScript与jQuery的等价物';s keyup()和keydown()

JavaScript与jQuery的等价物';s keyup()和keydown(),javascript,jquery,html,css,keypress,Javascript,Jquery,Html,Css,Keypress,我在stackoverflow上看到了以下链接: 在我的上下文中,我使用 $(document).keydown(Keypress); $(document).keyup(Keyoff); 对于函数 function Keypress(evt) { if (evt.keyCode == 39) rightpress = true; else if (evt.keyCode == 37) leftpress = true; } //unset function Ke

我在stackoverflow上看到了以下链接:

在我的上下文中,我使用

$(document).keydown(Keypress);
$(document).keyup(Keyoff);
对于函数

 function Keypress(evt) {
     if (evt.keyCode == 39) rightpress = true;
     else if (evt.keyCode == 37) leftpress = true;
 }

 //unset
 function Keyoff(evt) {
     if (evt.keyCode == 39) rightpress = false;
     else if (evt.keyCode == 37) leftpress = false;
 }
有javascript等价物吗?像window.onload

window.onkeydown = Keypress;
window.onkeyup = Keyoff;

为了使用与jQuery的
on
方法更“等效”的方法,您不应该使用
onkeydown
onkeydup
处理程序。使用
addEventListener
attachEvent
attachEvent
专门用于IE的旧版本,因此
addEventListener
是标准,并被所有其他浏览器使用。但是您应该始终包含支持,这样您就可以创建一个函数来处理这一切。尝试:

function addEvent(element, eventName, callback) {
    if (element.addEventListener) {
        element.addEventListener(eventName, callback, false);
    } else if (element.attachEvent) {
        element.attachEvent("on" + eventName, callback);
    }
}

addEvent(window, "keydown", Keypress);
addEvent(window, "keyup", Keyoff);
这允许您添加多个处理程序,就像jQuery的
on
方法一样。设置
.onkeydown
.onkeydup
属性只允许一个处理程序(除非您要覆盖另一个处理程序)。
addEvent
函数还可以做很多事情,来进行标准的跨浏览器事件处理(例如,根据回调的返回类型所发生的事情)。现在这并不重要——如果您想要完全的跨浏览器兼容性,这就是jQuery的目的:)

参考资料:

  • addEventListener

我认为您在另一个示例中描述的复杂性是由于窗口的
load
事件和jQuery的文档
'ready'
事件之间的差异造成的。为什么不使用
onkeydown
onkeydup
?只是因为它们不像jQuery的
on
方法的“等价物”?除非您想添加多个事件处理程序(OP似乎不是这样),否则它们不是一个完全有效的替代方案吗?还是有其他原因?只是想在这里学习,说“你不应该使用”听起来像是一件坏事。。为什么呢?我可以看出它的灵活性是如何降低的,但如果灵活性不是一个真正的要求,这并不是一件坏事。@user1846192这就是原因。你要的是“等价物”。jQuery的
on
方法允许为特定事件绑定或解除绑定多个处理程序。设置
onevent
属性在所有浏览器中都得到了广泛的支持-显然旧IE与
addEventListener
存在一些不一致之处。但是你是对的——在OP的例子中,他们只想将一个事件绑定到每个事件。只是,如果任何其他代码想要将另一个处理程序绑定到同一个事件,那么使用
onevent
的东西是不可能的。@user1846192我想我的“你不应该使用”真的只是我的说法“对于你想在上获得jQuery的
等价物的问题,你不应该使用其他建议
onevent
的答案,因为它们不做
上的
所做的事情”好吧,我明白了:)你是在解决“等价物”“这是问题的一部分,现在我又在读这个问题了,我意识到问题其实没有另一部分。谢谢。@user1846192我想我应该更清楚这一点。我更新了一些答案,希望能说得更好。谢谢你指出这一点!我添加了一个链接,可能有助于解释
onevent
addEventListener