2009-09-11 11 views

Répondre

-7

Vous devez appliquer l'événement hanlders après les éléments ont été insérés dans les DOM

+4

Pourquoi les éléments doivent-ils être «insérés dans le DOM» pour que les auditeurs d'événements soient joints? – kangax

+1

Parce que le DOM est ce qui fournit les événements en premier lieu. Est-ce que tu plaisantes? –

+5

Eh bien, vous pouvez ajouter des gestionnaires avant l'insertion de documents, mais il est évident que vous devez créer les éléments avant d'ajouter les gestionnaires. Si vous écrivez innerHTML directement dans le document, les actes de création et d'insertion sont la même chose; pas si vous le faites avec des méthodes DOM. – bobince

0

Vous pouvez essayer de gérer les événements pour les éléments parents, qui sont disponibles comme chargé DOM, puis obtenir élément lié à l'événement.

<ul id="list"> 
    <li id="first">The first</li> 
    <li id="second">The second</li> 
    <li id="third">The third</li> 
</ul> 

document.getElementById('list').onclick(function(e){ 
    o = e.originalTarget; 
    // if you click on second li o will bi the same as document.getElementById('first') 
    // even if li with id "first" is inserted to DOM after creating this event handler to "list" 
    // so here you can perform actions with it 
    // hope it will help 
}); 
+0

er, '.click (fonction ...)'? C'est jQuery, n'est-ce pas? – bobince

+0

oh désolé, à droite, il y aura .onclick() –

+0

'onclick' est une propriété, pas une fonction. –

-1

Merci à tous.

J'ai résolu cela en ajoutant le code ci-dessous à l'événement "en cas de succès" de la requête XMLHTTP qui peuplait le DOM avec les éléments provenant du serveur. Cela a fonctionné pour moi. Josh, vous avez eu la tête qui bouge dans la bonne direction (bien qu'il aurait été agréable de voir une illustration de code) alors j'ai marqué votre réponse comme la réponse. Je suis désolé mais ce n'est pas vrai.

if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) { 

         var m_sel=document.getElementById("fcat"); 

         if (m_sel) { 

          var maxi = m_sel.options.length; 

          for(var i = 0; i < maxi; i++) 
          { 
           var option = m_sel.options[i]; 
            option.addEventListener("click", toggleElem, true); 

          }         

         }   
}