2009-05-20 13 views
6

Ho creato un plug-in che ha ridotto le ossa di un plug-in (ovvero nessuna funzionalità, solo la struttura) per eseguire il debug di questo problema ed esiste ancora. Si tratta di ridimensionare div e basa questo sulla larghezza del documento.Larghezza finestra JQuery non corretta in Chrome

Il problema è che la larghezza riportata dei documenti è ridotta di 17 px dalla sua larghezza effettiva e quindi non dimensiona correttamente i div.

ho messo in avvisi per scoprire dove si verifica il problema: Prima funzione di "pronto": 1780px (corretta larghezza) All'interno della funzione "pronto": 1763px All'interno del Plugin: 1763px (tutti i valori restituiti da "document.width" e "$ (document) .width()" con gli stessi risultati)

Questo sta accadendo solo in Chrome e rimane anche con il plugin ridotto a nulla efficacemente.

Qualche idea sul perché questo sta accadendo?

+0

Potrebbe essere la dimensione delle barre di scorrimento viene sottratto. Alcuni codici potrebbero aiutare a localizzare il problema. – Magnar

+0

L'ho ristretto in un posto più specifico. Se ho un avviso che compare prima della funzione ready, dopo aver fatto clic su OK il rendering Div diventa corretto. Se questo avviso viene rimosso, torna a essere 17px a corto della sua larghezza effettiva. Ci sono altri eventi o qualcos'altro che accade quando viene mostrato l'allarme? – Stuart

+1

Ho appena rimosso tutto il testo segnaposto che stava forzando le barre di scorrimento e il divario ora si è ridotto a uno spazio di dimensioni della barra di scorrimento. Penso che tu abbia ragione nel senso che la larghezza della barra di scorrimento è stata sottratta. Qualche idea per una soluzione alternativa? – Stuart

risposta

2

Ho trovato che jQuery (window) .width() restituisce un valore errato in Safari e Chrome.

+1

Webkit in realtà non segue gli standard del W3C sulla definizione della larghezza. Include la barra di scorrimento nella larghezza della finestra, nonostante le specifiche dicano che non dovrebbe. Boooo! – dudewad

3

tratto da jQuery documentation:

Mentre JavaScript fornisce il carico evento per l'esecuzione di codice quando una pagina è reso, questo evento non ottiene attivato fino a quando tutte le attività come immagini sono state completamente ricevute. Nella maggior parte dei casi, lo script può essere eseguito non appena la gerarchia DOM è stata completamente costruita. Il gestore ha passato a .ready() è garantito per essere eseguito dopo che il DOM è pronto, quindi questo è in genere il posto migliore per allegare tutti gli altri gestori di eventi e eseguire altro codice jQuery. Quando si utilizzano gli script che si basano sul valore delle proprietà di stile CSS , è importante leggere i fogli di stile esterni di riferimento o prima di facendo riferimento agli script.

Nei casi in cui il codice deduce caricati attivi (ad esempio, se le dimensioni sono tenuti di un'immagine), il codice devono essere collocati in un gestore per l'evento carico invece.

probabilmente dovrebbe usare

$(window).load(function() {}); 

come evento di innesco

+0

Se metti $ (window) .width() nella console, è anche sbagliato. Non è una questione di quando viene chiamato, è una questione di Chrome che include la barra di scorrimento come parte della larghezza tramite CSS ma in JS, usa la larghezza della finestra con la barra di scorrimento sottratta. – Sawtaytoes

Problemi correlati