Mam ukryty element wejściowy pliku. Czy możliwe jest wywołanie okna dialogowego wyboru pliku ze zdarzenia kliknięcia przycisku?
javascript
jquery
html
tamakisquare
źródło
źródło
click()
nadisplay:none
wejściu i to działałoclick()
żywioł zdisplay: none
dziełami! ;) Jak wiele się zmieniło w ciągu ostatnich czterech lat.hidden
zamiast tego użyć atrybutustyle="visibility:hidden"
:<input id="myInput" type="file" hidden>
( w3schools.com/tags/att_global_hidden.asp )W większości odpowiedzi brakuje tu przydatnych informacji:
Tak, możesz programowo kliknąć element wejściowy za pomocą jQuery / JavaScript, ale tylko wtedy, gdy robisz to w module obsługi zdarzeń należącym do zdarzenia, które ZACZĘŁO UŻYTKOWNIK!
Na przykład nic się nie stanie, jeśli ty, skrypt, programowo klikniesz przycisk w wywołaniu zwrotnym Ajax, ale jeśli umieścisz tę samą linię kodu w module obsługi zdarzeń, który został wywołany przez użytkownika, zadziała.
PS
debugger;
Słowo kluczowe zakłóca okno przeglądarki, jeśli znajduje się przed programowym kliknięciem ... przynajmniej w chrome 33 ...źródło
$(staticElementParent).on("click", "dynamicChild", function(){})
debugger;
słowo kluczowe nie zakłóca już automatycznego klikaniaDla przypomnienia, istnieje alternatywne rozwiązanie, które nie wymaga javascript. To trochę hack, wykorzystując fakt, że kliknięcie etykiety powoduje skupienie się na powiązanych danych wejściowych.
Potrzebujesz a
<label>
z odpowiednimfor
atrybutem (wskazuje na wejście), opcjonalnie stylizowanym na przycisk (z bootstrapem, użyjbtn btn-default
). Gdy użytkownik kliknie etykietę, zostanie otwarte okno dialogowe, na przykład:źródło
Nie jestem pewien, jak przeglądarki radzą sobie z kliknięciami
type="file"
elementów (względy bezpieczeństwa i wszystko inne), ale to powinno działać:Przetestowałem to JSFiddle w Chrome, Firefox i Opera i wszystkie pokazują okno dialogowe przeglądania plików.
źródło
hover
zdarzenia: jsfiddle.net/UQfaZ/1Zawijam
input[type=file]
etykietę, stylizuję jąlabel
według własnych upodobań i ukrywaminput
.Rozwiązanie czysto CSS.
źródło
<input type="file" hidden>
aby usunąć potrzebę stosowania stylu CSS.Niestety, jedynym sposobem jest utworzenie
<input type="file">
elementu, a następnie zasymulowanie kliknięcia.Jest mała wtyczka (bezwstydna wtyczka), która wyeliminuje ból związany z koniecznością robienia tego przez cały czas: file-dialog
źródło
Najlepsze rozwiązanie, działa we wszystkich przeglądarkach ... nawet na urządzeniach mobilnych.
Ukrywanie typu pliku wejściowego powoduje problemy z przeglądarkami, krycie jest najlepszym rozwiązaniem, ponieważ nie jest ukrywany, po prostu się nie wyświetla. :)
źródło
visibility:hidden
powinien być lepszym wyborem.visibility: hidden
nadal wpływa na układ.display: none
jest tym, czego chcesz.Ze względów bezpieczeństwa nie można tego zrobić w różnych przeglądarkach. To, co zwykle robią ludzie, to nakładanie pliku wejściowego na coś innego i ustawianie jego widoczności na ukrytą, aby był uruchamiany samodzielnie. Więcej informacji tutaj.
źródło
<input type="file">
, a nie<select>
.$.click()
.Upewnij się, że używasz wiązania, aby uzyskać właściwości komponentów w REACT
źródło
Korzystając z jQuery, możesz wywołać
click()
symulację kliknięcia.źródło
To zadziałało dla mnie:
źródło
Dla tych, którzy chcą tego samego, ale używają React
źródło
źródło