2010-12-07 27 views
1

J'ai un problème avec certains javascript que j'ai écrit qui ne fonctionne que par intermittence. Je ne connais pas grand-chose sur la façon dont les choses fonctionnent dans le DOM mais je soupçonne que le JS que j'ai écrit essaie d'accéder à un élément dans le DOM avant qu'il n'existe. J'ai écrit le JS pour l'ajouter à un formulaire de montage. Je n'ai pas accès au code réel dans le formulaire pour y apporter des modifications, je ne peux que faire des changements JS.Problème Javascript - intermittent ne peut pas trouver l'élément en utilisant getElementById

Voici le lien vers le formulaire http://www.tfaforms.com/186347

et c'est le javascript que j'utilise sur le document charge

window.onload=function() { 

document.getElementById("submit-").style.visibility = "hidden"; 
document.getElementById("wfPageNextId1").value="Calculate"; 
document.getElementById('wfPageNextId1').setAttribute('onclick', 'Calculate2011()') 

} 

Je reçois des erreurs disant que wfPageNextId1 est nulle et setAttribute ne peut pas être appelé.

Toute aide serait grandement appréciée. Merci d'avance.

Répondre

3

Il semble que certains des DOM soient créés dynamiquement par d'autres scripts. Vous pouvez retarder jusqu'à ce que les éléments existent par quelque chose le long de ces lignes:

function initializeForm() { 
    var submit = document.getElementById("submit-"), 
     nextPage = document.getElementById("wfPageNextId1"); 
    if (submit && nextPage) { 
     submit.style.visibility = "hidden"; 
     nextPage.value = "Calculate"; 
     nextPage.setAttribute('onclick', 'Calculate2011()'); 
    } else { 
     // try again in 1 second 
     setTimeout(initializeForm, 1000); 
    } 
} 

window.onload = function() { 
    initializeForm(); 
}; 

Vous devez également vous assurer que vous n'êtes pas nuking tout window.onload défini dans les autres scripts:

if (window.onload) { 
    var currentOnload = window.onload; 
    window.onload = function() { currentOnload(); initializeForm(); }; 
} else { 
    window.onload = function() { initializeForm(); }; 
} 
+0

cela me semble logique. Il est en train de changer l'étiquette sur le bouton de calcul et de masquer le bouton de soumission mais il ne fait pas les calculs, pas dans IE de toute façon, mais c'est dans crome. D'autres suggestions. Je ne suis pas sûr de ce que vous voulez dire à propos d'autres window.onloads? – Kaskade

+0

semble également fonctionner dans Firefox mais pas IE8. Il n'y a pas d'erreurs javascript sur la page, donc je ne sais pas quel est le problème et pourquoi il ne va pas dans la fonction Calculate2011. Je mets une alerte dans la fonction et il n'est pas affiché dans IE mais il est dans FF et Crome – Kaskade

+0

J'ai ajouté un exemple d'une définition «sûr» 'onload'. Techniquement, vous devriez probablement tester le type de 'onload' actuel. – Ishmael

1

Vérifié la page HTML et infact il n'y a pas d'élément HTML avec l'ID wfPageNextId1. Quel est l'élément de la page auquel vous essayez d'accéder?

+0

Je suis en train d'accéder au Bouton Page suivante (je modifie le texte sur le bouton pour "calculer") et puis je dois appeler la fonction Calculate2011 sur le clic de ce bouton – Kaskade

+0

Je pense que vous ajoutez dynamiquement l'élément et document.getElementById ("wfPageNextId1") L'instruction est appelée avant même que l'élément ne soit créé et ajouté à dom. – Chandu