2013-02-21 20 views
5

stavo usando questo codice:Rileva ingresso immagine caricamento

<input type="image" ... onLoad="this.style.opacity = 1" /> 

Funziona bene in IE (almeno, le versioni che supportano opacity: p), ma in Chrome caso onLoad non ha fuoco quando l'immagine caricata .

Nota che l'attributo src dell'ingresso può cambiare, e quando lo fa un po 'di JavaScript imposta il opacity-0 prima, e adatti transition proprietà far sembrare l'immagine svanisce e la nuova svanisce. Inoltre, l'uso di <input type="image"> è necessario perché il server ha bisogno delle coordinate.

devo jerry-truccato utilizzando una posizione assoluta <img> prendendo il onLoad e opacity, posto dietro la <input> che ora utilizza un pixel GIF trasparente. Mentre funziona, è brutto.

C'è un modo per rilevare il caricamento corretto di un'immagine utilizzata in un <input> in Chrome, o è simile a background-image, non rilevabile?

EDIT: In caso aiuta, ecco una Fiddle

+0

Invece di usare un 'img' dietro l'ingresso, è possibile utilizzare un' img' distaccato e usare il suo gestore del carico di fare ciò che si vuole, come spesso usato in pre-caricatori. Non c'è molta differenza, ma il tuo DOM principale sarebbe più pulito. –

+0

Il nome dell'evento corretto è 'onload' con tutto minuscolo, ma non penso ci sia una garanzia che il tag' 'attiverà quell'evento per un pulsante immagine. Non riesco a trovare nessuna specifica che dice che è supportato. – jfriend00

+3

@ jfriend00 Gli attributi HTML non fanno distinzione tra maiuscole e minuscole, potrei scrivere 'OnLoAd' e funzionerebbe. –

risposta

-2

È possibile utilizzare il metodo addEventListener() con un riferimento del vostro input.

Si noti che prima di aggiungere il listener di eventi all'input è necessario caricare la pagina, per farlo basta applicare un altro listener di eventi per l'oggetto finestra e quindi attivare la funzione che fa riferimento all'input.

+1

No, non fa differenza. Penso di sapere come usare gli ascoltatori di eventi, grazie;) –

+0

Inoltre, non c'è modo di installare un listener di eventi che garantisca che sia installato prima che un'immagine caricata venga caricata se il tag si trova nel codice HTML della pagina. – jfriend00

+0

Beh, io non so esattamente cosa stai cercando di fare compagno, onload attr non funziona su Chrome per qualche bug, ma ho provato con js e funziona (anche cambiando src ogni volta), scusa se essere inutile o l'ho ripetuto un sacco di volte, (solo cercando di aiutare) – Neo

0

Mi ricordo che mi sono imbattuto in un problema come questo in passato. È possibile rilevare facendo quanto segue:

window.onload = function(){ 
    var input = document.getElementById('input1'); 
    input.src=''; 
    input.addEventListener('load', loadImage, false); 
    input.src = 'http://theoffguard.net/wp-content/upLoads/2012/04/Nick-Cage.jpg'; 
} 

function loadImage() 
{ 
    console.log("Image is loaded"); 
} 

DEMO: http://jsbin.com/ufovom/9/edit

Spero che questo aiuti!

+0

Com'è diverso dal gestore in linea? –

+0

Non ce n'è davvero uno, ma a causa del modo in cui Chrome gestisce 'onload', devi farlo in questo modo. Ho apportato le modifiche al tuo esempio originale: http://jsbin.com/ufovom/14/edit. Credo che questo sia un problema con i browser basati su -webkit. – Dom

1

Questa è una sorta di un hack, ma è possibile creare un'istanza di un Image oggetto Javascript, e quindi impostare il listener di eventi su questo e quindi impostare lo src dell'ingresso di carico quando è fatto:

http://jsfiddle.net/t8n4y/

Diniego: testato solo su Chrome

HTML:

<input type="image" id="imgInput" /> 

Javascript:

var photo = document.getElementById('imgInput'); 
      var img = new Image(); 
      img.addEventListener('load', function() { alert("done loading"); }, false); 
      img.src = 'http://jeremydouglass.com/gamertextually/images/gt_snowflake_tags-2-ach-large.png?ran=' + Math.random(); 
      photo.src = img.src; 
+0

Sembra un attacco ancora più grande di quello che sto già usando ... –

+0

@Kolink bene, almeno qui l'evento di caricamento su img è legittimo. – Christophe

+0

Stai dicendo che HTML e JavaScript non sono sposati e hanno avuto gestori di eventi inline come figli bastardi? –

0
<input id="image" type="image" ... onLoad="this.style.opacity = 1" /> 

    //script -> 

    $("#image").change(function() { 
       if (this.files && this.files[0]) { 
       var FR = new FileReader(); 
       FR.onload = function (e) { 
        //your onload 
       }; 
       FR.readAsDataURL(input.files[0]); 
      } 
}); 
+0

Ok, sembra che tu stia confondendo 'input [type = image]' con 'input [type = file]'. Ma è difficile da dire perché hai postato semplicemente un codice senza alcun tipo di spiegazione ... –