7

Buduję lightbox jako projekt szkolny i nie mogę używać jQuery. Mam obraz. Po kliknięciu, JavaScript tworzy przezroczysty element div z identyfikatorem "nakładka". Chcę, aby div usunął się, lub rodzic, aby go usunąć, ale to nie działa. Myślę, że ma to związek z tym, że nie możesz połączyć "onclick" z elementem, który jeszcze nie istnieje.Tworzenie elementu, który może go sam usunąć?

+3

Zgadza się, nie możesz. Ustaw haczyk po dołączeniu go do ciała. Również twoje pytanie może skorzystać z kodu i przykładów tego, co próbujesz, i co dokładnie dzieje się źle. – Dave

+0

Czy możesz opublikować bieżące dane wyjściowe HTML i skryptu, aby utworzyć nakładkę. Może możemy dodać 'setTimeout', jeśli chcesz go usunąć automatycznie na podstawie pewnego czasu, jeśli jest to wykonalne lub możemy dodać wydarzenie do elementu nadrzędnego, aby go usunąć. Byłoby jednak znacznie łatwiej z odpowiednim kodem. – Nope

Odpowiedz

19

Musisz usunąć element z rodzica. Coś takiego:

d = document.getElementById('overlay'); 
d.parentNode.removeChild(d); 

Albo może po prostu schować go:

d.style.display = 'none'; 

I, oh: można dodać kod JavaScript do (nowo utworzone) elementu poprzez przypisanie funkcji do atrybutu onclick.

d = document.createElement('div'); 
d.onclick = function(e) { this.parentNode.removeChild(this) }; 
1

Nie używaj znacznika onclick w znaczniku, użyj funkcji zdarzeń JavaScript, takich jak addEventListener, aby dynamicznie dodawać zdarzenia do elementów. Powinieneś również upewnić się, że po usunięciu elementów poprawnie wyczyścisz wszystkie swoje referencje (innymi słowy, wyrejestruj procedury obsługi zdarzeń).

+0

Dedykować umysł do opracowania? –

0

mam go :) robiłem go jak bart smutny, ale to nie działa. mój kod wyglądał mniej więcej tak:

image.onclick = function(){ *create overlay*}; 
overlay.oncklick = function() {*overlay.parentNode.removeChild(overlay)*}; 

przeglądarka działa jak wtf? bo czyta kod i myśli "Nie mogę sprawdzić, czy użytkownik kliknął nieistniejący element." Zrobiłem to:

image.onclick = function(){ 

*create overlay* 

overlay.onclick = function() {*remove overlay*}; 
}; 
+0

thnx everyone! – Sam

Powiązane problemy