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

JS HTMLElement.click() nie działa

Object Storage Arubacloud
0 głosów
365 wizyt
pytanie zadane 31 marca 2019 w JavaScript przez RafalS VIP (122,820 p.)

Ma ktoś pomysł czemu na tej stronce gdy w konsoli wrzucę taki kod:

document.querySelector('#root > div > div:nth-child(4) > div.hero').click()

to nic się nie dzieje?

A jeśli robię coś nie tak to jak kliknąć ten przycisk z poziomu JS?

2 odpowiedzi

+1 głos
odpowiedź 1 kwietnia 2019 przez Comandeer Guru (601,510 p.)
wybrane 2 kwietnia 2019 przez RafalS
 
Najlepsza

A czy klik jest na pewno przypięty do .hero czy może do któregoś z jego dzieci? Devtools pokażą, gdzie są jakieś eventy.

komentarz 1 kwietnia 2019 przez RafalS VIP (122,820 p.)
Faktycznie jest podpięty pod jeden div głębiej co nie zmienia faktu, że ani .click() ani .dispatchEvent(new MouseEvent('click')) nie działają
1
komentarz 1 kwietnia 2019 przez Comandeer Guru (601,510 p.)

Okazuje się, że to wcale nie było zdarzenie click, tylko zdarzenie mousedown. Dodatkowo musi bąbelkować – inaczej React go nie wykryje. Zatem:

const evt = new MouseEvent( 'mousedown', { bubbles: true } );
document.querySelector( '.prompt div:last-of-type' ).dispatchEvent( evt );

 

komentarz 2 kwietnia 2019 przez RafalS VIP (122,820 p.)

mousedown testowałem, ale bubbles bym się raczej nie domyślił. Dzięki yes

+1 głos
odpowiedź 31 marca 2019 przez niezalogowany
edycja 31 marca 2019

metoda click() należy do biblioteki jQuery i działa z obiektami typu jQuery.

Aby wykorzystać metodę click() musisz pobrać element ze strony jako obiekt jQuery, czyli za pomocą

$('#root > div > div:nth-child(4) > div.hero').click(() => {
 alert( "Handler for .click() called." );
});

Jeżeli nie używasz jQuery to musisz użyć innego odwołania:

let hero = document.querySelector('#root > div > div:nth-child(4) > div.hero');

hero.addEventListener('click', (e) => {
 alert( "Handler for click event called." );
}, false);

 

komentarz 31 marca 2019 przez RafalS VIP (122,820 p.)
Myślałem, że korzystam z tego:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
co nie wygląda na Jquery tylko podstawowy DOM.
komentarz 31 marca 2019 przez niezalogowany
Tak, tylko w dokumentacji napisane jest, że metoda click() działa tylko z elementem <input> . Do reszty elementów już musisz użyć raczej normalnego eventListener'a
komentarz 1 kwietnia 2019 przez Comandeer Guru (601,510 p.)
komentarz 1 kwietnia 2019 przez Comandeer Guru (601,510 p.)

Pomijam fakt, że addEventListener nie wywołuje zdarzenia, tylko przypina listener – co w tym wypadku nie ma sensu. Jak już to dispatchEvent.

komentarz 1 kwietnia 2019 przez niezalogowany
Ok widocznie źle zrozumiałem pytanie, lub było źle sformułowane
1
komentarz 1 kwietnia 2019 przez niezalogowany

@Comandeer - Ja czytałem dokumentację  tutaj:
https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-2651361
Co zrozumiałem źle? 

 

Simulate a mouse-click. For INPUT elements whose type attribute has one of the following values: "button", "checkbox", "radio", "reset", or "submit".

Symuluje event click dla elementów INPUT o atrybutach [...].

Gdzie popełniłem błąd w zrozumieniu tej dokumentacji, skoro metoda symulująca click() działa na każdym elemencie?

1
komentarz 1 kwietnia 2019 przez Comandeer Guru (601,510 p.)
Błąd polega na tym, że to jest stara specyfikacja DOM. Obecnie click jest definiowany bezpośrednio w specyfikacji HTML, a jego definicja brzmi zupełnie inaczej (przytaczam ją wyżej).

Podobne pytania

0 głosów
3 odpowiedzi 376 wizyt
+1 głos
1 odpowiedź 218 wizyt
pytanie zadane 14 października 2021 w JavaScript przez Mruczekkk Nowicjusz (220 p.)
0 głosów
1 odpowiedź 235 wizyt
pytanie zadane 23 października 2019 w JavaScript przez Mavimix Dyskutant (8,390 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...