2013-05-01 7 views
6

Sto testando l'idea di utilizzare un div su un invisibile <input type="file" /> così posso creare un pulsante di caricamento file di fantasia. Ho visto qualche codice in giro ma è stato un po 'complicato. Ho pensato di provare questa idea di usare jQuery per innescare lo scatto del tag input dal suo contenitore divAttivazione del clic con jquery sul tag di input-file nascosto

Html:

<div id="container">&nbsp;Click Me!&nbsp; 
    <input type="file" id="file" /> 
</div> 

Javascript:

$(document).ready(function() { 
    $('#container').click(function() { 
     $('#file')[0].click(); 
    }) 
}); 

Anche se il codice viene eseguito OK su Chrome e IE, non funziona su Safari e ha un problema divertente con Firefox: fa scattare il clic due volte! Qualche idea sul perché sia ​​così? jQuery dovrebbe essere multipiattaforma e io sono perplesso. Ecco il violino

http://jsfiddle.net/kostasd/C4sCs/1/

Grazie in anticipo per qualsiasi aiuto!

Kostas

+3

Il lavoro in giro per questo non è quello di nascondere l'elemento, ma invece dare un 'display: block; position: absolute; top: 0; a sinistra: -9999px,', poi avvolgere con un contenitore che ha 'position: relativo; overflow: hidden; width: somepx;'. ** NON USARE display: nessuno **. Quindi attiva il tuo clic; bam, supporto cross-browser. – Ohgodwhy

+0

Grazie per il suggerimento. Lo proverò. – user2339672

+0

Nella versione corrente di Firefox funzionerà anche con 'display: hidden' – CoderPi

risposta

5

le diverse soluzioni possibili, che ho provato sono

  • Usando della visibilità del: hidden; larghezza: 1px; per l'elemento di input File.

Il jsfiddle perché è come seguire http://jsfiddle.net/C4sCs/36/

  • Utilizzando solo il Css per richiamare l'input file clicca e non utilizzando jQuery affatto

    #container { 
    border:1px solid #b0b0b0; 
    display: inline-block; 
    position:relative; 
    overflow:hidden; 
    cursor:pointer; 
    } 
    #file { 
    position:absolute; 
    top:0; 
    opacity:0; 
    display:block; 
    } 
    

http://jsfiddle.net/C4sCs/42/

+1

Non inserire file in un elemento del pulsante! Mi hai preso Div funziona però. – Stoutie

+0

Questo ha causato problemi anche a me. Grazie per il suggerimento! –

Problemi correlati