2010-06-30 3 views
1

J'ai un script avec lequel je me bats depuis maintenant une semaine.Javascript ne reconnaît pas le contenu div dynamique

J'ai une page qui a un div avec id ("content"). Maintenant, j'ai chargé du contenu, une forme contenue dans une balise div pour être spécifique, dans ce div VIA Ajax, et il affiche bien

Maintenant, le défi est - Lorsque le formulaire est soumis, Im appelle une fonction qui désactivera tout le champ sur l'élément dans cette balise div. J'ai toujours l'erreur "indéfini".

Il semble que la div, que j'amené à la page ne reconnaît pas javascript ..

J'ai cherché google, bing, yahoo..i juste havent encore trouvé la solution ...

S'il vous plaît, qu'est-ce que je fais ???

J'ai inclus le code ci-dessous -

+++++++++ Le code ci-dessous pour mon fichier javascript externe

++++++++++++ ++++++++

// JavaScript Document 

var doc = document; 
var tDiv; 
var xmlHttp; 
var pgTitle; 

function getXMLObj(){ 
     if (window.XMLHttpRequest){ 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
       Obj = new XMLHttpRequest(); 
      } 
     else if (window.ActiveXObject){ 
      // code for IE6, IE5 
       Obj = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     else{ 
       alert("Your browser does not support Ajax!"); 
     } 
     return Obj; 
} 


function loadCont(toLoad, view){ 
    doc.getElementById('loadBlank').innerHTML = '<div id="loading">Processing Request...</div>'; 
    var url; 
    switch(toLoad){ 
     case 'CI': 
      pgTitle = "Administration - Company Information"; 
      url = "comp_info.php?v=" + view + "&sid=" + Math.random(); 
      break; 
     case 'JB': 
      pgTitle = "Administration - Jobs"; 
      url = "jobs.php?v=" + view + "&sid=" + Math.random(); 
      break; 
     case 'US': 
      pgTitle = "Administration - Users"; 
      url = "users.php?v=" + view + "&sid=" + Math.random(); 
      break; 
     case 'EP': 
      pgTitle = "Administration - Employees"; 
      url = "emp.php?v=" + view + "&sid=" + Math.random(); 
      break; 
     case 'AP': 
      pgTitle = "Administration - Recruitments"; 
      url = "applicants.php?v=" + view + "&sid=" + Math.random(); 
      break; 
     case 'JV': 
      pgTitle = "Administration - Recruitments"; 
      url = "jobvacancy.php?v=" + view + "&sid=" + Math.random(); 
      break; 
    } 

    xmlHttp = getXMLObj(); 
    if (xmlHttp !== null && xmlHttp !== undefined){ 
      xmlHttp.onreadystatechange = loadingContent; 
      xmlHttp.open('GET', url, true); 
      xmlHttp.send(null); 
    } 
} 

function loadingContent(){ 

    if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){ 
      //Show the loading and the title, but hide the content... 
      if (xmlHttp.status == 200){ 
       doc.getElementById('dMainContent').innerHTML = parseScript(xmlHttp.responseText); 
       doc.getElementById('loadBlank').innerHTML = ''; 
      } 
      else{ 
       doc.getElementById('dMainContent').innerHTML = 'Sorry..Page not available at this time. <br />Please try again later'; 
       doc.getElementById('loadBlank').innerHTML = ''; 
      } 
    } 
    if (xmlHttp.readyState < 4){ 
      //Show the loading and the title, but hide the content... 
      doc.getElementById('ActTitle').innerHTML = pgTitle; 
      doc.getElementById('dMainContent').innerHTML = ''; 
    } 
} 

function valCompInfo(){ 
    //First Disable All the elements.. 
    alert('I was hree'); 
    DisEnaAll('CompForm'); 
    //Now..lets validate the entries.. 
} 

function DisEnaAll(contId){ 
    //alert(doc.getElementById(contId).elements); 
    var theId = doc.getElementById(contId).elements; 

    try{ 
     var numElems = theId.length; 

     for (var i=0; i < (numElems - 1); i++){ 
      (theId[i].disabled == false) ? (theId[i].disabled = true) : (theId[i].disabled = false);     
     } 
    } 
    catch(e){ 
     var msg = "The following error occurred: \n\n"; 
     msg += e.description 
     alert(msg); 
    } 

} 


// http://www.webdeveloper.com/forum/showthread.php?t=138830 
function parseScript(_source) { 
    var source = _source; 
    var scripts = new Array(); 

    // Strip out tags 
    while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) { 
     var s = source.indexOf("<script"); 
     var s_e = source.indexOf(">", s); 
     var e = source.indexOf("</script", s); 
     var e_e = source.indexOf(">", e); 

     // Add to scripts array 
     scripts.push(source.substring(s_e+1, e)); 
     // Strip from source 
     source = source.substring(0, s) + source.substring(e_e+1); 
    } 

    // Loop through every script collected and eval it 
    for(var i=0; i<scripts.length; i++) { 
     try { 
      eval(scripts[i]); 
     } 
     catch(ex) { 
      // do what you want here when a script fails 
     } 
    } 

    // Return the cleaned source 
    return source; 
} 

Ce code se trouve sur la page principale où le javascript est

<div id="dMainContent"> 

</div> 
</body> 
</html> 

Et fina lly, le contenu de la page i suis le chargement via ajax ..

<div style="width:738px" id="CompForm"> 
    <div class="tdright"> 
     <a href="#" class="lnkBtn" onclick="valCompInfo();"><?php echo $btnNm; ?></a> &nbsp; 
    </div> 
</div> 

C'est le code ..

Merci

+6

s'il vous plaît. –

+0

Peut-être moi, mais je n'ai jamais vu la propriété * éléments * d'un nœud dom 'var theId = doc.getElementById (contId) .elements;'; est-ce dans la spécification w3? – FK82

+0

faites attention à ne pas mélanger des trucs C# .net dans votre JavaScript – bcm

Répondre

0

Ajouter vos fonctions Javascript ou fichier JS externe à la page originale.

+0

Oui, je l'ai déjà fait .. Maintenant, quand j'appelle une fucntion contenue dans le script externe, cela fonctionne bien, mais s'arrête quand la fonction a besoin ou croiser un élément du contenu que je charge par l'intermédiaire ajax Merci – Nuel

-1

EDIT: Note par commentaires: ce n'est pas la réponse :) Voir les commentaires pour les détails de pourquoi.

Laissé comme réponse simplement comme aide à l'apprentissage comme suggéré.

Ne devrait pas

xmlHttp.onreadystatechange = loadingContent; 

être

xmlHttp.onreadystatechange = loadingContent(); 

ou

loadingContent(); 

et cette fonction doit renvoyer une valeur si vous voulez assigner comme ça ...

+0

Eh bien, je ne sais pas vraiment pourquoi, mais .. xmlhttp.onreadystatechange = loadingContent; travaux. J'ai observé que xmlhttp.onreadystatechange = loadingContent(); ne fonctionne que si je mets cette façon .. xmlhttp.onreadystatechange = loadingContent() {// certains contenus ici ...} Mais tout de même, les deux œuvres. Je ne sais pas pourquoi le contenu que j'ai apporté via l'ajax ne peut pas être lu par la fonction javascript – Nuel

+1

** Non, il ne doit PAS être! ** Il attribue un gestionnaire d'événements. – SLaks

+0

Oui, j'étais assez stupide en le regardant de cette façon :(Peut-être que je devrais juste supprimer cette réponse ... –

0

ce n'est pas JavaScript ....

doc.getElementById(contId).elements 

mais est utilisé dans votre JavaScript ... vous n'obtiendrez absolument rien.(Null)

Je ne pense pas que ce soit valide soit:

theId[i].disabled == false 
+0

En haut de la page ... dans le contenu du fichier javascript, j'avais déjà déclaré doc = document; C'est parce que je n'aime pas taper "document" tout le type .. c'est assez long pour mes éléments de comparaison – Nuel

+0

ou désactivé ne sont pas des méthodes valides dans l'exemple – bcm

+0

Je pense que les éléments ne fonctionnent que pour les éléments de formulaire alors que le vôtre est un DIV. Aussi désactivé ne fonctionne que sur les éléments de formulaire comme la zone de texte de saisie. Exemple de désactivation: document.getElementById ('aaa'). Disabled; – bcm

2

La question est qui est pas un formulaire HTML balise div (id "CompForm"). "Elements" est une collection de l'élément form et non de l'élément div. Donc, lorsque vous essayez d'accéder à div.elements, la propriété n'est pas définie.

Voir MSDN, form.elements fait partie de DOM niveau 1 (selon MSDN) afficher le code

http://msdn.microsoft.com/en-us/library/ms537449%28v=VS.85%29.aspx

+0

Merci .. cette réponse a été très utile..Mais je veux ajouter cela .. Sommes même d'accord que le "élément" est une collection d'éléments de formulaire, pourquoi est-ce que le div (avec id - 'compForm') , que j'ai utilisé Ajax pour charger dans le innerHTML de l'autre div (avec id - 'dMainContent'), je ne peux pas accéder à cette div de mon code javascript? Pourquoi renvoie-t-il une valeur nulle? Merci .. – Nuel

+0

Je ne sais pas si je comprends votre question complètement, mais je crois que c'est parce que l'id doit être 'CompForm' pas 'compForm' lorsqu'il est utilisé avec document.getElementById(). Il est sensible à la casse et devrait correspondre à ce qui est dans le HTML. Et bien sûr vous devez vous assurer que la balise div 'CompForm' est déjà ajoutée au DOM. – airmanx86

Questions connexes