2017-02-14 2 views
0

Ich habe Probleme beim Hinzufügen eines Klickereignis-Listeners zu Elementen, die noch nicht auf der Seite vorhanden sind. Nur ein Hinweis, dass ich den folgenden Code in einem JQuery Equavilant zum Dokumentieren fertig bin, so dass es ausgeführt wird, nachdem das DOM geladen wurde. Also ich habe ein Div, die ich als eine Art TasteHinzufügen des Ereignis-Listeners zum dynamischen Container

<div id="openContainer"> ... </div> 

Jetzt bin mit, wenn dieses div geklickt wird, wird ein anderes div auf der Seite dynamisch hinzugefügt. Dieses div wird nur hinzugefügt, wenn das obige click-Ereignis stattfindet. Das hinzugefügte div hat eine Schaltfläche mit der ID-Suche. Ich versuche, einen Event-Listener hinzuzufügen. Bisher habe ich diese

document.getElementById('openContainer').addEventListener('click', function() { 
    document.getElementById('search').addEventListener('click', function() { 
     alert("ADDED") 
    }); 
}); 

Allerdings, wenn ich dies betreibe ich einen Fehler, dass document.getElementById (...) null ist. Ich denke, der Grund dafür ist, dass der Event-Listener hinzugefügt wird, bevor das eigentliche dynamische div hinzugefügt wurde. In der Tat, ich weiß, dass dies der Fall ist, weil es mit einem Timeout funktioniert, z.

document.getElementById('openContainer').addEventListener('click', function() { 
    setTimeout(function() { 
     document.getElementById('search').addEventListener('click', function() { 
      alert("ADDED") 
     }); 
    }, 2000); 
}); 

Gibt es eine Möglichkeit, dies ohne Zeitüberschreitung zu tun?

Dank

Antwort

1

Sie können auf dem vorhandenen Element ein einzelnes Ereignis-Handler platzieren, und in der anonymen Funktion von addEventListener(), überprüfen Sie die ID des Elements, auf dem das Ereignis ausgelöst wurde:

document.getElementById('openContainer').addEventListener('click', function(event){ 
    var clicked = event.target; 
    if (clicked.id === 'openContainer') { 
    // the '#openContainer' element was clicked, 
    // ...do stuff 
    } else if (clicked.id === 'search') { 
    // the '#search' element was clicked, 
    // ...do stuff 
    } 
}); 
+0

Das einzige Problem damit ist, dass es immer noch den Fehler zeigt, weil das Suchelement noch nicht vorhanden ist –

+0

Können Sie genug von Ihrem Code zeigen, dass wir Ihr Problem reproduzieren können? Der Ansatz sollte keine Fehler erzeugen, denn wenn das Element mit der ID '' search '' nicht existiert, wird es nicht in den 'else if'-Zweig, der es benötigt, eingetragen. –

0

Ein möglicher Grund ist, dass Ihr JavaScript ausgeführt wird, bevor das DOM-Element überhaupt erstellt wird.

Stellen Sie sicher, dass Ihre Skript-Tags nach den Tags sind.

Verwandte Themen