2011-06-29 10 views
7

ho alcuni script di jQuery che corre dopo che la finestra è caricatalarghezza ritorno 0 in jQuery

$(window).load(function() { 
    $('.picture a img').each(function(index) { 
     $(this).height(280); 
     if ($(this).width() > $(this).height()) { 
      alert("yes"); 
     } else { 
      alert("no"); 
     } 

    }); 
}); 

ottengo sempre un "no" da questo quando so alcune delle immagini dovrebbe essere un "sì". Quando ho rintracciato lo script in chrome ho notato che lo $(this).width() restituisce sempre uno 0. go su Google e alcuni suggerimenti erano che le immagini non sono state caricate ma qui ho usato il metodo window.load che pensavo dovesse essere eseguito una volta che tutto è stato caricato. qualche idea??

grazie per qualsiasi aiuto in anticipo

+0

È possibile incollare l'URL per le immagini e/o le intestazioni HTTP per le immagini? Questo coerente x-browser? –

+0

E se rimuovi tutti i CSS da esso (posizione assoluta, altezza, float a sinistra)? –

+2

Questo non sembra avvisare 0 per me in chrome ... http://jsfiddle.net/MS7dU/. Puoi riprodurre il problema su [jsfiddle] (http://www.jsfiddle.com)? –

risposta

1

Chrome è strano riguardo alle larghezze dell'immagine. L'ho notato quando ho creato una galleria fotografica di jQuery. Se la larghezza dell'immagine non è specificatamente impostata nel tag, chrome restituirà 0. FF, e IE calcolerà la larghezza, ma Chrome non lo farà. Prova effettivamente ad impostare la larghezza e vedi se ottieni il risultato desiderato allora.

<img width="200" src="..." /> 
-5

Il metodo corretto da utilizzare, per eseguire i propri script dopo il DOM ha terminato il caricamento, è:

$(document).ready(function() { /*your code here*/ }); 
+2

'ready' si attiva specificamente prima che le immagini vengano caricate. –

0

provare

if ($(this).attr("width") > $(this).attr("height")) {

0

provare ad aggiungere un evento di caricamento sull'immagine, quindi verrà eseguito solo quando l'immagine è completamente caricata.

$(window).load(function() { 
    $('.picture a img').each(function(index) { 
    $(this).bind('load', function() { 
     $(this).height(280); 
     if ($(this).width() > $(this).height()) { 
      alert("yes"); 
     } else { 
      alert("no"); 
     } 
    }) 
    }); 
}); 

si può anche provare a controllare this.complete sull'oggetto immagine

+0

Gli eventi 'load' sono cross-browser molto incoerenti sulle immagini. Da [load docs] (http://api.jquery.com/load-event/) "Avvertenze sull'evento di carico quando utilizzato con le immagini: Una sfida comune che gli sviluppatori tentano di risolvere utilizzando il collegamento .load() è quello eseguire una funzione quando un'immagine (o una collezione di immagini) è stata caricata completamente.Ci sono molti avvertimenti noti con questo che dovrebbe essere notato. Questi sono: non funziona in modo coerente né affidabile nel browser ... " –

1

è necessario eseguire il codice quando l'immagine viene caricata, il codice seguente dovrebbe funzionare:

$(window).load(function() { 
    $('.picture a img').load(function() { 
     $(this).height(280); 
     if ($(this).width() > $(this).height()) { 
      alert("yes"); 
     } else { 
      alert("no"); 
     } 
    }); 
}); 

si noti che ogni elemento DOM che ha una sorta di risorsa Web associata a (window, img, iframe) risponde all'evento .load().

0

Volevo solo aggiungere che dovresti anche assicurarti che l'immagine sia effettivamente un elemento visibile. Ho avuto un sacco di problemi in passato cercando di misurare il visibile: nascosto o visualizzato: nessun elemento. Se si sta infatti tentando di misurare un elemento nascosto, è possibile ottenere passato facendo qualcosa di simile

var width = $('img').show().width(); 
$('img').hide(); 

Ora che il codice è incredibilmente vago, ma ti dà il mio pensiero dietro visibilità lampeggiante.

Problemi correlati