Próbuję wywołać okno przesyłania (przycisk przeglądania) za pomocą jQuery.
Metoda, którą teraz wypróbowałem, to:
$('#fileinput').trigger('click');
Ale to nie działa. Proszę pomóż. Dziękuję Ci.
javascript
jquery
css
Alec Smart
źródło
źródło
Odpowiedzi:
Wynika to z ograniczeń bezpieczeństwa.
Dowiedziałem się, że ograniczenie bezpieczeństwa występuje tylko wtedy, gdy
<input type="file"/>
jest ustawionedisplay:none;
lub jestvisbilty:hidden
.Spróbowałem więc umieszczenie go na zewnątrz przez ustawienie rzutni
position:absolute
itop:-100px;
i voilà to działa.zobacz http://jsfiddle.net/DSARd/1/
nazwij to hackem.
Mam nadzieję, że to działa dla Ciebie.
źródło
left: -100px;
. Nigdy nie wiadomo, jak długo może być stronąto zadziałało dla mnie:
JS:
HTML:
CSS:
>>> Kolejny, który działa w różnych przeglądarkach: <<<
Chodzi o to, aby nałożyć niewidoczny ogromny przycisk „Przeglądaj” na przycisk niestandardowy. Kiedy więc użytkownik kliknie przycisk niestandardowy, w rzeczywistości klika przycisk „Przeglądaj” w natywnym polu wejściowym.
JS Fiddle: http://jsfiddle.net/5Rh7b/
HTML:
CSS:
JavaScript:
źródło
height
sugeruje się zmianę naheight: 100%
Możesz użyć elementu LABEL np.
Spowoduje to uruchomienie pliku wejściowego
źródło
Mam to działające (= testowane) w IE8 +, najnowsze FF i chrome:
Klawisz ustawia ostrość przed kliknięciem (w przeciwnym razie chrome go ignoruje).
Uwaga: MUSISZ mieć wyświetlane i widoczne dane wejściowe (tak jak w, nie
display:none
i nievisibility:hidden
). Proponuję (jak wielu innych wcześniej), aby bezwzględnie ustawić wejście i wyrzucić je z ekranu.źródło
Sprawdź moje skrzypce.
http://jsfiddle.net/mohany2712/vaw8k/
źródło
adardesign przyłapał go na ignorowaniu elementu wejściowego pliku, gdy jest on ukryty. Zauważyłem również, że wiele osób zmienia rozmiar elementu na 0 lub wypycha go poza granice za pomocą regulacji pozycjonowania i przepełnienia. To wszystko są świetne pomysły.
Alternatywnym sposobem, który wydaje się działać doskonale, jest po prostu ustawienie krycia na 0 . Wtedy zawsze możesz po prostu ustawić pozycję, aby nie przesuwać innych elementów, tak jak robi to hide. Przesunięcie elementu o prawie 10 000 pikseli w dowolnym kierunku wydaje się po prostu trochę niepotrzebne.
Oto mały przykład dla tych, którzy go chcą:
źródło
Z ciekawości możesz zrobić coś takiego, jak chcesz, dynamicznie tworząc formularz przesyłania i plik wejściowy, bez dodawania ich do drzewa DOM:
Nie ma potrzeby dodawania uploadForm do DOM.
źródło
Prawidłowy kod:
źródło
To celowo i zgodnie z projektem. To kwestia bezpieczeństwa.
źródło
Właściwie znalazłem na to naprawdę prostą metodę:
W ten sposób twoje pole wejściowe pliku może mieć właściwość css wyświetlaną na none i nadal wygrywać transakcję :)
źródło
Jest za późno na odpowiedź, ale myślę, że ta minimalna konfiguracja działa najlepiej. Ja też szukam tego samego.
// css
jsbin
demo przycisków wprowadzania pliku bootstrap
źródło
To bardzo stara kwestia, ale niestety ta kwestia jest nadal aktualna i wymaga rozwiązania.
(Zaskakująco proste) rozwiązanie, które wymyśliłem, polega na „ukryciu” rzeczywistego pola wejściowego pliku i zawinięciu go w znacznik LABEL (może być oparty na Bootstrap i HTML5, w celu ulepszenia).
See here:
Przykładowy kod tutajW ten sposób rzeczywiste pole wejściowe pliku jest niewidoczne, a wszystko, co widzisz, to dostosowany „przycisk”, który w rzeczywistości jest zmodyfikowanym elementem LABEL. Po kliknięciu tego elementu ETYKIETA pojawi się okno wyboru pliku, a wybrany plik przejdzie do pola wejściowego rzeczywistego pliku.
Ponadto możesz dowolnie manipulować wyglądem i zachowaniem (na przykład: pobrać nazwę wybranego pliku z pliku wejściowego pliku, po jego wybraniu i pokazać go gdzieś. Element LABEL nie robi tego automatycznie, oczywiście. Zwykle po prostu umieszczam go wewnątrz LABEL, jako jego treść tekstową).
Uważaj jednak! Manipulacja wyglądem i zachowaniem jest ograniczona do wszystkiego, co możesz sobie wyobrazić i o czym pomyśleć. ;-) ;-)
źródło
Udało mi się za pomocą prostego $ (...). Click (); z JQuery 1.6.1
źródło
albo po prostu
źródło
miałem problemy z niestandardową walidacją po stronie klienta
<input type="file"/>
podczas używania fałszywego przycisku, aby go uruchomić, a rozwiązanie @Guillaume Bodi działało dla mnie (równieżopacity: 0;
na Chrome)i styl CSS do przesyłania danych
źródło
Spróbuj tego, to hack. pozycja: bezwzględna dotyczy przeglądarki Chrome, a wyzwalacz („zmiana”) dotyczy przeglądarki IE.
źródło
$.browser
jest przestarzały w nowszych wersjach jQueryMój problem był trochę inny na iOS 7. Okazuje się, że FastClick powodował problemy. Wszystko, co musiałem zrobić, to dodać
class="needsclick"
do mojego przycisku.źródło
To prawdopodobnie najlepsza odpowiedź, biorąc pod uwagę problemy z różnymi przeglądarkami.
CSS:
JS:
HTML:
źródło
Myślę, że rozumiem twój problem, bo mam podobny. Więc tag
<label>
ma atrybut dla, możesz użyć tego atrybutu, aby połączyć swoje wejście z type = "file". Ale jeśli nie chcesz aktywować tego za pomocą tej etykiety, ponieważ jakaś reguła twojego układu, możesz zrobić w ten sposób.Oczywiście dostosujesz to do własnego celu i układu, ale to jest łatwiejszy sposób, w jaki wiem, aby to działało !!
źródło
Na podstawie odpowiedzi Guillaume Bodi zrobiłem to:
co oznacza, że jest ukryty na początku, a następnie wyświetlany dla wyzwalacza, a następnie natychmiast ponownie ukryty.
źródło