2013-05-01 9 views
6

Testuję ten pomysł użycia div na wierzchu niewidocznego <input type="file" />, dzięki czemu mogę wykonać fantazyjny przycisk przesyłania plików. Widziałem trochę kodu, ale było nieco skomplikowane. Myślałem próbować ten pomysł wykorzystania jQuery aby wywołać kliknięcie tagu wejściowego z pojemnika divWywołanie kliknięcia z jquery na ukrytym znaczniku pliku wejściowego

HTML:

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

javascript:

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

Chociaż kod działa OK na Chrome i IE, nie działa na Safari i ma zabawny problem z Firefoksem: dwa razy uruchamia kliknięcie! Jakiś pomysł, dlaczego tak się dzieje? jQuery ma być wieloplatformowy i jestem zaintrygowany. Oto Fiddle

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

Z góry dziękuję za wszelką pomoc!

Kostas

+3

Pracę całego tego nie jest ukrycie elementów, lecz daje to w 'display: block; pozycji: absolutnych, górny: 0; lewej: -9999px;', owinąć to z kontenerem, który ma 'position: relative, overflow: hidden, width: somepx;'. ** NIE UŻYWAJ wyświetlacza: brak **. Następnie uruchom kliknięcie; bam, obsługa wielu przeglądarek. – Ohgodwhy

+0

Dziękujemy za napiwek. Dam temu szansę. – user2339672

+0

W aktualnej wersji Firefoksa będzie również działać z 'display: hidden' – CoderPi

Odpowiedz

5

różnych możliwych rozwiązań, które próbowałem są

  • Korzystanie visiblity: hidden; szerokość: 1 piksel; dla elementu wejściowego Plik.

jsfiddle dla niego jest jak postępować http://jsfiddle.net/C4sCs/36/

  • Używając tylko CSS zadzwonić kliknij plik wejściowy, a nie przy użyciu jquery w ogóle

    #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

Nie owijaj pliku wejściowego w element przycisku! Masz mnie. Div działa jednak. – Stoutie

+0

To również było przyczyną problemów. Dzięki za podpowiedź! –