2016-05-16 1 views
1
var requestInfo; 
var requestParent; 

var switchButton = setInterval(function() { 
    requestParent = document.getElementsByClassName("solid_color_2"); 
    if(typeof requestParent[0] != "undefined") { 
    requestInfo = requestParent[0].getElementsByTagName('A'); 
    requestInfo[0].className = ""; 
    requestInfo[0].className = "instance-0"; 
    requestParent[0].className = ""; 
    requestParent[0].className = "button"; 
    requestInfo[0].style.backgroundColor = "#029c53"; 
    clearInterval(switchButton); 
    console.log("interval last time"); 
    } 
}, 1000); 

Can't execute "requestParent[0].className = "button";JavaScript Undefined folie

est ici balisage:

<div class="button solid_color_2"> 
    <a class="primary-color instance-0" href="#">REQUEST INFO</a> 
</div> 

Voici l'erreur: enter image description here

Répondre

3

getElementsByClassName retourne une liste de noeud en direct, ce qui signifie que les changements dans les DOM sont reflétés par des changements dans la liste.

Ainsi, avec cette ligne, vous obtenez une liste de noeud en direct d'éléments de bouton

requestParent = document.getElementsByClassName("solid_color_2"); 

Mais avec cette ligne ...

requestParent[0].className = ""; 

vous êtes clearing la suppression classname cet élément de la liste provoquant l'erreur lorsque vous essayez de le mettre à jour. La meilleure option est d'utiliser querySelectorAll qui renvoie une collection HTML qui est pas en direct. Vous pouvez également supprimer les lignes qui définissent className = "".

var switchButton = setInterval(function() { 

    // pay particular attention here because we're picking up 
    // a element using it's *class*, hence .solid_color_2 and 
    // not solid_color_2 (without the preceding dot) 
    requestParent = document.querySelectorAll(".solid_color_2"); 
    if (typeof requestParent[0] != "undefined") { 
    requestInfo = requestParent[0].querySelectorAll('a'); 
    requestInfo[0].className = "instance-0"; 
    requestParent[0].className = "button"; 
    requestInfo[0].style.backgroundColor = "#029c53"; 
    clearInterval(switchButton); 
    console.log("interval last time"); 
    } 
}, 1000); 

DEMO

+0

C'est génial! Pouvoir supprimer le className = "" est comme un bonus aussi! Maintenant je vais utiliser setInterval plus souvent sachant que je peux le faire .. Intéressant comment vous passez le .className à la méthode querySelectorAll .. me rappelle de cette petite chose appelée jQuery .. –

+0

Si vous trouvez cette réponse utile, n'oubliez pas de cliquer la coche à côté @JonathanJames – Andy