2013-05-11 4 views
3

Я видел эту ссылку на StackOverflow: $(document).ready equivalent without jQueryJavaScript эквивалент KeyUp JQuery (в) и 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?

ответ

4
+0

ой: D от того, ссылка это заставляло это казаться намного сложнее .... спасибо! – user2138152

+0

Я думаю, что усложнение, которое вы описали в другом примере, было связано с различием между событием 'load' окна и событием jQuery' 'ready''. –

8

Для того, чтобы использовать некоторые более "эквивалентны" on метод JQuery, вы не должны использовать onkeydown и onkeyup обработчиков. Используйте 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 и .onkeyup позволяет использовать только один обработчик (если вы не хотите перезаписывать другой). Существует гораздо больше, чем функция addEvent, чтобы сделать стандартную кросс-браузерную обработку событий (примером является то, что происходит на основе возвращаемого типа обратного вызова). Это действительно сейчас не важно - если вы хотите полную совместимость кросс-браузер, это то, что JQuery для :)

Ссылки:

+0

Почему бы не использовать 'onkeydown' и' onkeyup'? Только потому, что они меньше похожи на «эквивалент» метода jQuery 'on'? Разве это не идеальная альтернатива, если вы не хотите добавить более одного обработчика событий (что, похоже, не относится к OP)? Или есть еще одна причина? Просто хочу узнать здесь, говоря «не следует использовать», это звучит как плохое дело. Почему? Я могу видеть, как он менее гибкий, но это не делает его плохим, если гибкость на самом деле не является требованием. –

+0

@ user1846192 Именно поэтому. Вы попросили «эквивалент». Метод jQuery 'on' позволяет нескольким обработчикам быть связанными или несвязанными для определенного события. Установка свойств «onevent» так же широко поддерживается во всех браузерах - очевидно, что существует некоторая несогласованность для старого IE с 'addEventListener'. Но вы правы - в примере OP, они только хотят привязать одно событие к каждому. Просто, если какой-либо другой код хочет связать другой обработчик с одним и тем же событием, он не будет «возможен», используя материал «onevent». – Ian

+0

@ user1846192 Я предполагаю, что мой «вы не должны использовать» на самом деле - это просто мой способ сказать: «Для вашего вопроса о желании получить эквивалент jQuery' on', вы не должны использовать другие ответы, которые предлагают «onevent», потому что они не «Делайте то, что' on' делает » – Ian

Смежные вопросы