Potrzebuję rozwiązania, aby wyświetlić okno dialogowe otwierania pliku w formacie HTML podczas klikania pliku div
. Okno dialogowe otwierania pliku musi zostać otwarte po div
kliknięciu.
Nie chcę wyświetlać pola pliku wejściowego jako części strony HTML. Musi być wyświetlany w osobnym oknie dialogowym, które nie jest częścią strony internetowej.
javascript
file
dialog
Arka
źródło
źródło
Odpowiedzi:
Oto ładny
Fine Uploader demo
To
<input type='file' />
sama kontrola. Ale nad nim jest umieszczony element div, a style CSS są stosowane, aby uzyskać ten efekt. Przezroczystość elementu sterującego pliku jest ustawiona na 0, więc po kliknięciu elementu div wydaje się, że okno dialogowe jest otwierane.źródło
dla IE dodaj to:
źródło
document.getElementById("logo").click()
wystarczy. Pokazują również inny sposób „Przeciągnij i upuść”. developer.mozilla.org/en-US/docs/Web/API/File/…Nie wiem, dlaczego nikt tego nie wskazał, ale oto sposób na zrobienie tego bez Javascript i jest również kompatybilny z każdą przeglądarką.
EDYCJA: W Safari
input
zostaje wyłączone, gdy jest ukryte za pomocądisplay: none
. Lepszym podejściem byłoby użycieposition: fixed; top: -100em
.Jeśli wolisz, możesz iść na „właściwą drogę” , używając
for
wlabel
skierowaną doid
wejścia w ten sposób:źródło
<input>
tag powinien miećname
atrybut; 2. Jeślifor
określono atrybut,<input>
znacznik pliku będzie wymagał rozszerzeniaid
.Simplicity is the ultimate sophistication
display: none
są wyłączone. Obejście polega na zastosowaniu innego podejścia do ukrycia danych wejściowych. Zaktualizuję odpowiedź, aby to odzwierciedlić.Właściwie nie potrzebujesz tego wszystkiego z kryciem, widocznością,
<input>
stylem itp. Po prostu spójrz:Demo na jsFiddle . Przetestowano w Chrome 30.0 i Firefox 24.0. Jednak nie działał w Operze 12.16.
źródło
To właśnie działało najlepiej dla mnie (testowane na IE8, FF, Chrome, Safari).
Wyjaśnienie: Umieściłem plik wejściowy bezpośrednio nad elementem, który ma być kliknięty, więc wszelkie kliknięcia trafiałyby albo do niego, albo do jego etykiety (co powoduje wyświetlenie okna dialogowego przesyłania, tak jakbyś kliknął samą etykietę). Miałem pewne problemy z częścią przycisku domyślnego wejścia wystającą z boku etykiety, więc
overflow: hidden
na wejściu idisplay: inline-block
na etykiecie były konieczne.źródło
Co się stanie, jeśli javascript jest wyłączony na komputerze klienta? Użyj następującego rozwiązania dla wszystkich scenariuszy. Nie potrzebujesz nawet javascript / jQuery. :
HTML
CSS
Objaśnienie:
for="Your input Id"
. Zdarzenie kliknięcia wyzwalaczy domyślnie przez HTML. Więc domyślnie uruchamia zdarzenie kliknięcia, nie ma potrzeby używania jQuery / javascript. Jeśli jest to po prostu zrobione przez HTML, dlaczego używać jQuery / jScript? I nie możesz powiedzieć, czy klient wyłączył JS. Twoja funkcja powinna działać, nawet jeśli JS jest wyłączony.Working jsFiddle (nie potrzebujesz JS, jquery)
źródło
Najpierw dodaj w nagłówku tagi:
jeśli masz już skrypt tagi , po prostu dodaj te funkcje powyżej.
W treści lub tagach formularza dodawanie:
Bez względu na to, gdzie w html, jest tak , jakbyś utworzył nową instancję klasy OpenFileDialog jako zmienną globalną , której nazwa jest identyfikatorem elementu, bez względu na to, gdzie w kodzie lub xaml, ale w skrypcie lub kodzie , nie możesz wpisać jego imienia, a następnie odczytać właściwości lub wywołać funkcji, ponieważ istnieją funkcje globalne, które wykonują te, które nie są zdefiniowane w elemencie input type = "file". Wystarczy nadać tym funkcjom identyfikator ukrytego typu danych wejściowych = "plik", który jest nazwą instancji OpenFileDialog w postaci łańcucha.
Aby ułatwić sobie życie w tworzeniu wystąpień otwartych plików dialogowych do kodu HTML, możesz utworzyć funkcję, która to robi:
a jeśli chcesz usunąć okno dialogowe otwierania pliku, możesz wykonać i użyć następującej funkcji:
ale zanim usuniesz okno dialogowe otwierania pliku, upewnij się, że istnieje, tworząc i używając następującej funkcji:
a jeśli nie chcesz tworzyć i dodawać okien dialogowych otwierania plików w treści lub tagów formularza w html, ponieważ jest to dodawanie ukrytego typu input = "file" s, możesz to zrobić w skrypcie używając powyższej funkcji tworzenia :
Upewnij się, że w pobliżu tagu body lub formularza dodano:
Nie musisz robić tego wiersza powyżej, jeśli już to zrobiłeś.
WSKAZÓWKA: Możesz dodać do swojego projektu lub witryny nowy plik JScript, jeśli jeszcze go nie masz, aw tym pliku możesz umieścić wszystkie funkcje okna dialogowego otwierania pliku z dala od tagów skryptu i strony HTML lub formularza internetowego i użyć je w swoim html lub stronie formularza internetowego z tego pliku JScript, ale nie zapomnij wcześniej połączyć html lub strony formularza internetowego z plikiem JScript oczywiście. Możesz to zrobić po prostu przeciągając plik JScript na swoją stronę HTML w formacie głowietagi. Jeśli Twoja strona jest formularzem internetowym, a nie prostym html, i nie masz tagów head, umieść ją w dowolnym miejscu, aby działała. Nie zapomnij zdefiniować zmiennej globalnej w tym pliku JScript, której wartością będzie treść lub identyfikator formularza jako ciąg. Po połączeniu pliku JScript ze stroną html lub formularzem internetowym możesz załadować zdarzenie treści formularza, ustawić wartość tej zmiennej na swój identyfikator treści lub formularza. Następnie w pliku JScript nie musisz już podawać dokumentowi identyfikatora treści lub formy jednej strony, po prostu nadaj mu wartość tej zmiennej. Możesz wywołać tę zmienną bodyId lub formId lub bodyOrFormId lub dowolną inną nazwę.
Powodzenia!
źródło
Najprostszy sposób:
Co ważne, użycie
display: none
zapewnia, że żadne miejsce nie zostanie zajęte przez ukryte wejście pliku (co się dzieje przy użyciuopacity: 0
).źródło
AFAIK nadal potrzebujesz
<input type="file">
elementu, wtedy możesz użyć niektórych rzeczy z dziwnego trybu, aby go nadać stylowiźródło
Jedynym bez
<input type="file">
jest osadzenie przezroczystego filmu flash na div. Następnie można użyć zdarzenia kliknięcia wygenerowanego przez użytkownika (zgodnego z nowymi regułami bezpieczeństwa Flash 10), aby wywołać wywołanie Flash FileReference.browse .Oferuje dodatkową zależność w porównaniu z dziwacznym sposobem, ale w zamian otrzymujesz znacznie więcej zdarzeń (takich jak wbudowane zdarzenia postępu).
źródło
Może wykorzystać
źródło