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

JQuery selector odnoszący się do treści html wczytanej asynchronicznie

Cloud VPS
0 głosów
317 wizyt
pytanie zadane 1 lipca 2018 w JavaScript przez Vxid Functixn Bywalec (2,720 p.)

Tworząc nowy projekt napotkałem się na pewien problem z selectorem jQuery. Mam formularz logowania działający asynchronicznie dlatego nie użyłem znaczników form bo nie chce żadnego odświeżania strony. Dane przesyłam AJAXem. Sam Formularz również jest wczytywany ajaxem z pliku php jako treść html.

div class="form-group">
    <label for="login1">Login lub email</label>
    <input class="form-control" type="text" id="login1">
</div>
<div class="form-group">
    <label for="pass1">Hasło</label>
    <input type="password" class="form-control" id="pass1">
</div>

To co chciałbym osiągnąć to aktywacje funkcji logowania po wciśnięciu enter. Korzystam z jquerry więc użyłbym $('#login1').keydown(event => { ... }); jednak to nie działa ponieważ formularz nie jest wczytany statycznie a jest dodany po załadowaniu strony. Czy ktoś wie dlaczego tak się dzieje i jak to ominąć?

2 odpowiedzi

0 głosów
odpowiedź 2 lipca 2018 przez Comandeer Guru (607,060 p.)
wybrane 2 lipca 2018 przez Vxid Functixn
 
Najlepsza

Musiałbyś wykorzystać event delegation przy użyciu $.fn.on:

$( 'body' ).on( '#login1', 'keydown', handler );

Inna rzecz, że to, co chcesz zrobić, przeglądarka ma wbudowane. Wystarczy otoczyć pola w form i zablokować domyślną akcję na submit.

komentarz 2 lipca 2018 przez Vxid Functixn Bywalec (2,720 p.)
Jak dodać własną akcję submit?
komentarz 2 lipca 2018 przez Comandeer Guru (607,060 p.)

Wykorzystując wspomniany już $.fn.on.

komentarz 2 lipca 2018 przez Vxid Functixn Bywalec (2,720 p.)
$( 'body' ).on( '#login1', 'keydown', function(){
    alert("work");
});

robię coś takiego i nic się nie dzieje. Czy źle użyłem tej funkcji?

komentarz 5 lipca 2018 przez Vxid Functixn Bywalec (2,720 p.)

Nie działało bo jako pierwszy argument podaje się akcję czyli keydown a jako drugi selektor.
 

$(document).on("keydown", '#login1, #pass1, #check1', function(event) { 
            if(event.which==13) {
                sign_manager.sign_in();
            }
        });

Teraz działa.

0 głosów
odpowiedź 2 lipca 2018 przez Mariusz08 Maniak (62,280 p.)
Wystarczy dodać listener z DOMContentLoaded i wtedy spróbować nasłuchiwać eventu keydown a #login1.

https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
komentarz 2 lipca 2018 przez Comandeer Guru (607,060 p.)

Po załadowaniu strony, więc to zdarzenie tego nie chwyci.

Podobne pytania

+1 głos
2 odpowiedzi 431 wizyt
pytanie zadane 7 lutego 2021 w JavaScript przez Maciek06 Użytkownik (680 p.)
0 głosów
1 odpowiedź 254 wizyt
pytanie zadane 27 kwietnia 2018 w JavaScript przez fyrr Użytkownik (910 p.)
0 głosów
1 odpowiedź 520 wizyt
pytanie zadane 28 kwietnia 2016 w HTML i CSS przez niezalogowany

93,453 zapytań

142,448 odpowiedzi

322,717 komentarzy

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

Kursy INF.02 i INF.03
...