2013-03-27 10 views
7

Sto costruendo un lightbox come progetto scolastico e non posso usare jQuery. Ho un'immagine Quando lo fai clic, Javascript crea un div trasparente con l'ID "overlay". Voglio che il div si rimuova o che il genitore lo rimuova ma non funziona. Penso che abbia a che fare con il fatto che non puoi collegare "onclick" a un elemento che non esiste ancora.Creazione di un elemento che può rimuoverlo da solo?

+3

Esatto, non è possibile. Quindi imposta il gancio dopo averlo aggiunto al corpo. Anche la tua domanda trarrebbe beneficio da alcuni codici ed esempi di ciò che hai provato, e esattamente da cosa sta andando male. – Dave

+0

Per favore, puoi pubblicare il tuo output HTML corrente e Script per favore usi la creazione dell'overlay. Forse possiamo aggiungere un 'setTimeout' se vuoi rimuoverlo automaticamente in base ad un certo lasso di tempo passato se ciò è fattibile o possiamo aggiungere un evento all'elemento genitore per rimuoverlo. Tuttavia, renderebbe molto più semplice con il codice pertinente. – Nope

risposta

19

È necessario rimuovere l'elemento dal genitore. Qualcosa di simile a questo:

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

Oppure si potrebbe semplicemente nasconderlo:

d.style.display = 'none'; 

E, oh: è possibile aggiungere codice Javascript ad un elemento (appena creato) assegnando una funzione per l'attributo onclick.

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

Non utilizzare il gestore onclick nel tag, utilizzare le funzioni di evento Javascripts come addEventListener per aggiungere dinamicamente l'evento agli elementi. Dovresti anche assicurarti che quando rimuovi gli elementi pulisci correttamente tutti i tuoi riferimenti (in altre parole, annulla la registrazione dei gestori di eventi).

+0

La mente downvote sta elaborando? –

0

li ho :) lo facevo come Bart triste, ma non ha funzionato. il mio codice era simile al seguente:

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

il browser funziona come wtf? perché legge il codice e pensa "Non posso controllare se l'utente ha fatto clic su un elemento non esistente." Quindi ho fatto questo:

image.onclick = function(){ 

*create overlay* 

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

thnx a tutti! – Sam

Problemi correlati