2012-02-21 16 views
5

Ho un codice inserito in $(document).ready(function(){ /*code*/ }); e tutto funziona correttamente, ad eccezione di una riga. Il codice sopra funziona bene, il codice sotto funziona bene, non ricevo errori nella mia console.

$('.main-right.category').height($('.footer').height() + $('.main-right.category').height()); 

Che non fa fuoco. Tuttavia, se lo incollo esattamente nella console degli sviluppatori e premi Invio dopo che la pagina è stata caricata, funziona. Tutti gli elementi esistono al caricamento della pagina (ovvero nessuno viene generato dinamicamente tramite javascript). Stesso risultato in chrome, firefox, IE.

Qualche idea?

modifica: dovrei aggiungere che il mio css è stato caricato prima del mio javascript e ho apportato altre modifiche correlate CSS in questo stesso file javascript che ha funzionato bene.

Inoltre, se console.log $ ('. Main-right.category'). Height() e $ ('. Footer'). Height() proprio sopra quella riga di codice, entrambi forniscono non- zero valori interi come mi aspetterei.

+0

Nessun errore nella console? Puoi pubblicare un link alla pagina? –

+1

Senza il resto del codice, l'unica cosa che posso pensare è che l'elemento DOM che stai bersagliando non è stato caricato nel DOM al momento dell'esecuzione dell'istruzione. Quando arrivi alla console, ovviamente, è lì e questa affermazione funziona. –

+0

Pubblica un jsFiddle? – j08691

risposta

5

L'evento pronto quando il DOM è pronto a lavorare con. Si differenzia dall'evento load che si attiva quando tutte le risorse (css, javascript, immagini, ...) sono tutte caricate.

Immagino che quando esegui il codice, gli elementi che stai cercando di ottenere l'altezza abbiano già calcolato un'altezza, quindi sembra che non accada nulla.

Quando si esegue il codice nella console, tutto viene caricato in modo che il comportamento sia quello previsto.

Per eseguire il collegamento all'evento di caricamento, controllare il metodo .load().

+0

Il link non è quello giusto, dovrebbe essere http://api.jquery.com/load-event/ –

+0

$ (finestra) .load ha funzionato, ma non capisco perché. Se console.log $ ('. Main-right.category'). Height() e $ ('. Footer'). Height() proprio sopra la riga di codice che non ha funzionato in $ (document) .ready(), entrambi forniscono valori interi diversi da zero come mi aspetterei e gli stessi valori che ottengo eseguendo la stessa riga di codice tramite la console di sviluppo. – LOLapalooza

0

Io di solito impostare l'altezza con:

var height = $('.footer').height() + $('.main-right.category').height(); 
$('.main-right.category').css('height',height+'px'); 
+0

Ho provato anche quello, non ha funzionato. Stranamente, perché se console.log $ ('. Main-right.category'). Height() e $ ('. Footer'). Height() proprio sopra quelle righe di codice, entrambi forniscono valori interi diversi da zero come mi aspetterei. – LOLapalooza

+0

@RickM Ecco perché quando si usa la console per iniettare il codice, la pagina ha finito di caricarsi ma non ha ancora finito il caricamento quando scatta l'evento 'document.ready'. Quando si attiva l'evento 'window.load', tutte le risorse nel documento sono state caricate. – Jasper

+0

@ Jasper Vedo, grazie per l'intuizione. Ho pensato mettendo console.log (var) nel file javascript, registrerebbe qualsiasi var era al momento dell'esecuzione. – LOLapalooza

3

$ (documento). Si attiva quando la struttura DOM è disponibile, in questo momento il rendering non è completamente utilizzato, quindi le dimensioni degli elementi potrebbero essere sconosciute e height() restituirà valori errati.

Utilizzare $(window).load().

0

È necessario utilizzare console per eseguire il debug dei selettori e visualizzare le altezze degli elementi;

$(document).ready(function() { 

    var $footer = $('.footer'); 
    var $category = ('.main-right.category'); 

    console.log($category, $footer); 
    console.log($category.height(), $footer.height()); 
    console.log('New height =', ($category.height() + $footer.height())); 

}); 
Problemi correlati