JavaScript与jQuery的等价物';s keyup()和keydown()
我在stackoverflow上看到了以下链接: 在我的上下文中,我使用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
$(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