GetElementByID non trova elemento presente nella pagina

martedì 25 agosto 2009 - 11.44

paquito_ita Profilo | Senior Member

Ciao,

in una master page (aspx) referenzio un file javascript esterno che deve reperire un div nella pagina:
<asp:ScriptManager id="scriptManager" runat="server"> <Scripts> <asp:ScriptReference Path="~/Scripts/FooterPlacer.js" /> </Scripts> Qui il file javascript: window.onload = footerPlacer(); function footerPlacer() { var layoutMainContainer = new Array(); //Holds the main container for the 2/3 cols layout layoutMainContainer[0] = "contentBox3COLS"; layoutMainContainer[1] = "contentBox2COLS"; var currentContainer; for(i=0; i< layoutMainContainer.length;i++) { currentContainer = document.getElementById('layoutMainContainer[i]'); if(currentContainer != null) { } } }
Il problema è che la variabile currentContainer è sempre null! Ma nella pagina c'è il div con ID = contentBox3COLS. Il div non è definito lato server (con runat= server), quindi sono sicuro che l'ID non venga modificato.

Perché tuttavia non riesco a reperire tale div?
Grazie

alx_81 Profilo | Guru

>Ciao,
ciao

>Il problema è che la variabile currentContainer è sempre null!
>Ma nella pagina c'è il div con ID = contentBox3COLS. Il div non
>è definito lato server (con runat= server), quindi sono sicuro
>che l'ID non venga modificato.
>Perché tuttavia non riesco a reperire tale div?
---- currentContainer = document.getElementById('layoutMainContainer[i]');
elimina le apici.

>Grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

paquito_ita Profilo | Senior Member

Gli apici erano una svista, ma anche senza non mi funziona.

Quello che vorrei fare è ottenere il div contentBox3COLS, per eesempio, e i suoi figli immediatamente successivi, ovvero al primo livello sotto tale nodo.

Purtroppo pero' quando eseguo lo script dalla master page il div è null, probabilmente perché ancora non creato, mentre se lo eseguo direttamente nella pagina content semplicemente non funziona, eppure non vedo errori apparenti.

Sapresti suggerirmi come ottenere i figli al primo livello dato l'ID di tale nodo?
Grazie di nuovo

var layoutMainContainer = new Array(); //Holds the main container for the 2/3 cols layout layoutMainContainer[0] = "contentBox3COLS"; layoutMainContainer[1] = "contentBox2COLS"; var currentContainer; for(i=0; i< layoutMainContainer.length;i++) { currentContainer = document.getElementById(layoutMainContainer[i]); if(currentContainer != null) { //Prendi i figli del primo livello var children = new Array(); for(k=0; k<currentContainer.childNodes.length;k++) { if(currentContainer.childNodes[k].nodeType == 1) { children.append(child); } } } }

alx_81 Profilo | Guru

>Sapresti suggerirmi come ottenere i figli al primo livello dato l'ID di tale nodo?
Prova ad usare jQuery (http://jquery.com), che ti consente di aspettare fino al caricamento completo del documento html (http://docs.jquery.com/Tutorials:Introducing_%24%28document%29.ready%28%29).
In questo modo se gestisci l'evento ready() sei sicuro che tutti gli elementi sono caricati. Poi puoi continuare ad usare javascript come linguaggio al suo interno, ma è molto più semplice ed intuitivo usare tutte le features che il framework js jQuery ti dà.

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5