2012-01-12 13 views
7

miałem post tutaj:IE9 input file wyzwalanie za pomocą JavaScript

.change acting weird in IE9

Mam jednak napotkasz nowego zdarzenia dotyczące obchodzenia formularza upload plików i był ciekaw, czy ktoś prowadzi do tego problemu .

Mój pierwotny problem polegał na tym, że nie mogłem uruchomić zdarzenia onchange i pomyślałem, że to może być problem z moim javascriptem, ale odkryłem, że ma to związek ze sposobem aktywacji formularza.

Mam plik wejściowy

<input type="file" name="abc"/> 

teraz robiłem 2 rzeczy.

Ukryłem dane wejściowe i utworzyłem przycisk (dla lepszej kontroli stylów), który aktywuje wejście.

<button id="mybutton">click to upload a pic</button> 
<input type="file" name="abc"/> 

a następnie JS dla interakcji między nimi:

$("#mybutton").click(function() { 
    $("Input[type=file]").click() 
}; 

i oczywiście złożyć na formularzu (używam rodzica w tym przykładzie, ale w moim rzeczywisty kod używam id formularza).

$("input[type=file]").change(function() { 
    $(this).parent().submit(); 
}); 

Kiedy klikam „myButton” oczekiwany wynik nie występują moje okno przeglądania otwiera i pozwala mi wybrać plik z mojego komputera. Również po zmianie pliku we wszystkich przeglądarkach innych niż IE uruchamiane jest zdarzenie onchange. Teraz, jeśli odkryję formularz i ręcznie kliknij przycisk "przeglądaj" i wybierz plik, w którym uruchamiane jest zdarzenie onchange. Zasadniczo przeglądarka traktuje kliknięcie przycisku pliku rzeczywistego inaczej niż robi $ ("input [type = file]"). Click()

ktoś wie jak to naprawić?

Odpowiedz

33

Jak wcześniej wspomniano, IE jest bardzo rygorystyczne przy przesyłaniu formularza zawierającego plik inp Uts. Pliki wejściowe muszą być uruchamiane za pomocą kliknięcia myszką, aby umożliwić przesłanie formularza. Dodatkowo wydaje się, że występuje błąd w IE9 i plikach wejściowych.

Dobrą wiadomością jest to, że istnieje sposób na ominięcie ograniczeń zabezpieczeń z IE przy użyciu etykietę:

  1. Tworzenie regularnych znacznik label połączony do wejścia plików. Etykieta uruchomi plik wejściowy tak jak zwykle.
  2. Ukryj etykietę jako przycisk za pomocą CSS.
  3. Wejście do pliku musi być wyświetlone (dla IE8), ale można je ukryć przy użyciu "widoczności: ukryta". IE8 zaakceptuje ten hack.
+1

Człowiek to działa dobrze, tego właśnie szukałem! Wypróbowałem wiele innych metod w IE 9, ale tylko to zadziałało! – Daniel

+0

@A. Klemens Dzięki, to naprawdę mnie uratowało! –

+0

IMHO powinno to być odpowiedzią! –

2

Jeśli się nie mylę, nie można tego zmienić, ponieważ jest to (pierwotnie miało to na celu chronić prywatność użytkowników, unikając w ten sposób przesyłania plików bez wyraźnej zgody/działania użytkownika.

+1

ah ic ... cóż, rozwiązaniem, które widziałem, jest wzięcie pola wejściowego i dopasowanie go do rozmiaru sztucznego przycisku i ukrycie go nad przyciskiem (aby użytkownik pomyślał, że klika przycisk przycisk, ale naprawdę klikają formularz). To jest po prostu brzydkie i dużo nieszczęśliwych CSS, aby poradzić sobie z ... – Brodie

+0

Zgaduję, że możesz też użyć flasha! Myślę, że właśnie tego używa większość ludzi, takich jak Gmail. – Ali

0
  1. upewnić się, że kod jest w $("document").ready(function(){... here..});

  2. wydaje wejść plików podczas przewodowy z .live("change", function(){}); dont dość dobrze

drugiej stylizacji rzeczy jest coś innego, ale ISN CSS” Wszystko to komplikuje - beautiful file upload

Powiązane problemy