2013-05-11 89 views
3

我看到的计算器此链接:$(document).ready equivalent without jQueryJavaScript的jQuery的KEYUP相当于()和的keydown()

在我的情况下,我使用

$(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?

回答

8

为了多用一些 “相当于” jQuery的on方法,你不应该使用onkeydownonkeyup处理程序。使用addEventListenerattachEventattachEvent是专门针对较早版本的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.onkeyup属性只允许一个处理程序(除非您想覆盖另一个处理程序)。 addEvent函数可以做更多事情来制作标准的跨浏览器事件处理(例如基于回调函数的返回类型)。这是真的,现在并不重要 - 如果你想完全跨浏览器兼容,这就是jQuery的对:)

参考文献:

+0

为什么不使用'onkeydown'和'onkeyup'?仅仅因为它们不像jQuery的“on”方法的“等价物”?除非你想添加多于1个事件处理程序(这似乎不是OP的情况),它们不是一个完全有效的选择吗?还是有另一个原因?只是想在这里学习,说“你不应该使用”听起来像是一件坏事。为什么?我可以看到它如何不够灵活,但如果灵活性不是真正的要求,那并不是一件坏事。 – 2013-05-11 04:33:14

+0

@ user1846192正是这个原因。你要求“等效”。 jQuery的'on'方法允许多个处理程序针对特定事件进行绑定或解除绑定。设置'onevent'属性在所有浏览器中都得到了广泛的支持 - 显然老式IE与'addEventListener'有一些不一致。但是你是对的 - 在OP的例子中,他们只想把一个事件绑定到每个事件上。只是,如果其他代码想要将另一个处理程序绑定到同一个事件,那么使用“onevent”的东西将不会“可能”。 – Ian 2013-05-11 04:42:51

+0

@ user1846192我想我的“你不应该使用”真的只是我的方式说:“对于你想要相当于jQuery的'on'的问题,你不应该使用其他的建议'onevent'的答案,因为他们不会'不要做什么'''做“ – Ian 2013-05-11 04:44:19