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

addEventListener wywołuje inne funkcje

Object Storage Arubacloud
0 głosów
196 wizyt
pytanie zadane 5 września 2017 w JavaScript przez Midgard Początkujący (390 p.)
Mam pewien problem związany z nasłuchem. Otóż chciałem nasłuchiwać kliknięcia na dwa różne elementy div i w zależności od tego, który zostanie kliknięty wywoływać pewne funkcje. Jedna z nich służy do pokazania diva style.display = "block", druga natomiast do jego ukrycia (analogiczne none). Otwieranie faktycznie działa, niestety zamknięcie już nie. Kombinowałem troszkę z kodem i wartościami startowymi i okazuje się, że zamknięcie również działa, ale tylko w momencie, w którym nie istnieje funkcja otwierająca. Z testów wynika, że przy dwóch funkcjach wywołują się one obie, stąd style.display pozostaje ciągle jako block.


<!DOCTYPE HTML>
<html>
<head>

    <link rel="stylesheet" type="text/css" href="style.css">
    
</head>
<body>

    <div id="image1" ><img src="arrow.png"/>
    <div id="modal">
        <div id="modal_view">
            tutututu
            <div id="close_sign">x</div>
            </div>
        </div>
    </div>
    
<script type="text/javascript" >
    
    var O2 = document.getElementById("image1");
    O2.addEventListener('click',OpenModal);
    
    var C1 = document.getElementById("close_sign");
    C1.addEventListener('click',CloseModal);
    
    
    function CloseModal(){
    document.getElementById("modal").style.display = "none";
}

function OpenModal(){
    document.getElementById("modal").style.display = "block";
}

    

    
    </script>
</body>
</html>

 

komentarz 5 września 2017 przez Midgard Początkujący (390 p.)
Mam pewien problem związany z nasłuchem. Otóż chciałem nasłuchiwać kliknięcia na dwa różne elementy div i w zależności od tego, który zostanie kliknięty wywoływać pewne funkcje. Jedna z nich służy do pokazania diva style.display = "block", druga natomiast do jego ukrycia (analogiczne none). Otwieranie faktycznie działa, niestety zamknięcie już nie. Kombinowałem troszkę z kodem i wartościami startowymi i okazuje się, że zamknięcie również działa, ale tylko w momencie, w którym nie istnieje funkcja otwierająca. Z testów wynika, że przy dwóch funkcjach wywołują się one obie, stąd style.display pozostaje ciągle jako block.

2 odpowiedzi

+1 głos
odpowiedź 5 września 2017 przez jankowa1ski Gaduła (3,560 p.)
Wydaje mi się że powodem jest to że twoj div clodemodal jest wewnatrz divu image1 to powoduje ze jak klikniesz w clodeModal to ten event klikniecia idzie jakby w góre i aktywuje tez listener image1. Event zachuwuje sie jak "babelek" czyli idzie w góre tu masz opis tego:

http://kursjs.pl/kurs/mouse.php#babelki
komentarz 5 września 2017 przez jankowa1ski Gaduła (3,560 p.)

PS tak jak napisał już @Comandeer lepiej uzyc klas np

.modalOpened

{

display:block

}

a domyąślnie modal ma display:none i jak klikasz to usuwasz klase lub dodajesz

np za pomoca modal.classList.toggle("modalOpened");

0 głosów
odpowiedź 5 września 2017 przez Comandeer Guru (600,730 p.)

Nie ma sensu rozbijać obsługi tej samej rzeczy na dwie funkcje. Zrób z tego jedną. Dodatkowo zamiast bawić się bezpośrednio stylami, zastosuj klasę w CSS i po prostu ją przełączaj.

Podobne pytania

0 głosów
1 odpowiedź 495 wizyt
+1 głos
2 odpowiedzi 311 wizyt
0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 11 listopada 2019 w JavaScript przez BlvckFox Gaduła (4,240 p.)

92,543 zapytań

141,384 odpowiedzi

319,488 komentarzy

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

...