• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed EventListener i onkeydown - jak połączyć aby działało?

Object Storage Arubacloud
0 głosów
247 wizyt
pytanie zadane 10 grudnia 2019 w JavaScript przez jupikajej Początkujący (440 p.)
zamknięte 10 grudnia 2019 przez jupikajej
document.querySelector("body").addEventListener('onkeydown', klik (event));
...
...
...
function klik (event)
{
    console.log(event.key);
}

Dlaczego gdy klikam klawisz to w konsoli nie pojawia się jaki to klawisz? Jest tylko undefined.

<body onkeydown="klik(event)">
...
...
...
function klik (event)
{
    console.log(event.key);
}

Zaś w tym przypadku wszystko działa dobrze. 

Nakieruje ktoś co robię źle w pierwszym przykładzie?

komentarz zamknięcia: ROZWIAZANE

2 odpowiedzi

+1 głos
odpowiedź 10 grudnia 2019 przez Comandeer Guru (601,110 p.)
wybrane 10 grudnia 2019 przez jupikajej
 
Najlepsza

Nazwy zdarzeń nie zawierają w sobie przedrostka on. Używa się go tylko w przypadku atrybutów w znacznikach HTML, do oznaczenia, że dany atrybut zawiera obsługę danego zdarzenia. Stąd należy użyć keydown.

Natomiast addEventListener wymaga też, by przekazywać mu funkcję. Funkcją jest klik – a więc wystarczy podać samą nazwę. Jeśli podamy klik( event ), to tak naprawdę od razu wywołamy funkcję klik i to, co ona zwróci, zostanie przypisane jako listener do zdarzenia keydown. W przypadku atrybutu [onkeydown] taki kod działa, ponieważ jest on tak naprawdę traktowany jako wnętrze funkcji, czyli mniej więcej coś takiego w JS:

function( event ) {
    klik( event );
}

 I taką też konstrukcję trzeba użyć w addEventListener, względnie jej skróconą wersję:

document.body.addEventListener( 'keydown', function( event ) {
    klik( event );
} );

// lub

document.body.addEventListener( 'keydown', klik );

 

+1 głos
odpowiedź 10 grudnia 2019 przez Michałełe Nałogowiec (25,600 p.)

Witam, zmień na

document.querySelector("body").addEventListener('keydown', klik);

 

komentarz 10 grudnia 2019 przez jupikajej Początkujący (440 p.)
Dzięki wielkie, działa. Mógłbyś wytłumaczyć dlaczego ma być samo keydown i tylko nazwa funkcji? I dlaczego w body działa tak jak jest?
komentarz 10 grudnia 2019 przez jupikajej Początkujący (440 p.)
I dlaczego gdy w body dam tak jak w EventListenerze to przestaje działać wtedy body?
1
komentarz 10 grudnia 2019 przez Michałełe Nałogowiec (25,600 p.)

Przed event'em dajemy 'on' tylko gdy dodajemy to w HTML.

Jako argument dajemy tylko nazwę funkcji - liczy się tylko to co funkcja która daliśmy przyjmuje ( de facto to nie musi ona przyjmować argumentu, też będzie działać).

Możesz też skorzystać z funkcji strzałkowej

document.querySelector("body").addEventListener('onkeydown', ( event) => {
    // ...
});

A nie dawać funkcję jako argument.

Podobne pytania

0 głosów
1 odpowiedź 509 wizyt
0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 8 czerwca 2020 w JavaScript przez rob Bywalec (2,440 p.)
0 głosów
0 odpowiedzi 137 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...