• 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

42 Warsaw Coding Academy
0 głosów
657 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 (607,060 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 (607,060 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 (607,060 p.)
komentarz 1 kwietnia 2019 przez Comandeer Guru (607,060 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 (607,060 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 604 wizyt
+1 głos
1 odpowiedź 469 wizyt
pytanie zadane 14 października 2021 w JavaScript przez Mruczekkk Nowicjusz (220 p.)
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 23 października 2019 w JavaScript przez Mavimix Dyskutant (8,420 p.)

93,389 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,749 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...