2013-11-22 3 views
6

Sto provando per la prima volta il framework Zurb Foundation 5 e ho ricevuto questo errore: "Uncaught TypeError: Layer must be un nodo di documento foundation.min.js: 8"Foundation 5 possible Bug: Uncaught TypeError: Il layer deve essere un nodo del documento foundation.min.js: 8

questo è accaduto perché ho avuto questo in:

<script type="text/javascript" src="libs/foundation.min.js"></script>

Quando mi sono trasferito al corpo, l'errore è andato.

Perché? mi manca qualcosa su javascript o è un bug?

+1

Leggere la documentazione: http://foundation.zurb.com /docs/javascript.html ti dice di posizionare jquery e fondamenta prima del tag body. –

+1

Prima del tag di chiusura *** *** body. Ma ci sono altre opzioni se sei costretto a mantenere il JS in testa: vedi sotto. – fny

risposta

8

Questo è un errore risolto in a recent commit che era merged into what will be v5.0.3. È sufficiente includere il commit manualmente o attendere fino alla release v5.0.3 e si dovrebbe essere a posto.

Cosa sta succedendo

Fondazione inizializza ora immediatamente da dove si carica il file invece di aspettare che il DOM per caricare. Per aumentare le prestazioni mobili, Foundation 5 incorpora una libreria denominata FastClick e tenta di collegarla a document.body durante l'inizializzazione, quindi se si esegue JavaScript nel <head /> prima del rendering dello <body />, FastClick genera quell'errore.

Se stai usando Rails Turbolinks, Flask Turbolinks, o qualsiasi libreria simile che sostituisce il <body /> in modo dinamico, è necessario mantenere i vostri JS nel <head />

2

Molto probabilmente il file HTML è stato qualcosa di simile:

<!doctype html> 
<html> 
<head> 
<title>Title</title> 

<script src="../js/jquery.js"></script> 
<script src="../js/foundation.min.js"></script> 

</head> 
<body> 

<script> 
    $(document).foundation(); 
</script> 

</body> 
</html> 

e hai ottenuto l'errore come:

Uncaught TypeError: Layer must be a document node 
Uncaught TypeError: Object [object Object] has no method 'foundation' 

Dovete spostare <script> linea che include foundation.js a parte del corpo, poco prima di un altro tag di script. Come è descritto nella documentazione. Non è un bug ma è una questione di ordine/esecuzione e dipendenza da script. Vedi load and execute order of scripts e altro collegato Q & A. E jquery.js deve essere incluso prima della libreria foundation.js.

+0

Non proprio. Il corpo era vuoto. –