2011-08-24 7 views
6

Jak niektórzy z was mogą już wiedzieć, zdarzenie onchange programu Internet Explorer jest zasadniczo zepsute przed wersją 9. Zamiast wyzwalania, gdy nastąpi zmiana, wyzwala się, gdy pole wejściowe traci ostrość i zmienia się.Co to jest obejście dla wymiany z użyciem plików wejściowych?

To prowadzi do różnych sposobów obejścia pól wyboru i przycisków opcji ("użyj zamiast nich" onclick ") i pól tekstowych (" użyj zamiast tego keyup ").

Mam jednak problem z wprowadzeniem pliku i nie mogę określić, co robię, aby otrzymać powiadomienie, że nowy plik został wybrany, tuż po tym, jak został zrobiony, a nie kiedy użytkownik kliknie gdzie indziej . Nie mogę dołączyć do zdarzenia myszy, ponieważ nie jest ono powiązane z myszą; i nie mogę dołączyć do zdarzenia na klawiaturze, ponieważ nie jest to związane z klawiaturą.

Byłbym skłonny użyć rzeczy specyficznych dla IE, jeśli to rozwiąże problem.


Dodatkowe informacje:

używam jQuery 1.6 i metoda live dołączyć zdarzenie.

$(".upload").live("change", function() { /* stuff here */ }); 
+0

trochę gadać na temat tego problemu tutaj: http://stackoverflow.com/questions/2389341/jquery-change-event-to-input-file-on-ie –

+0

http://jsfiddle.net/c8JuC/1/ działa na IE9 z emulacją IE7. – pimvdb

+0

@pimvdb, używam 'live', ponieważ generuję pęczek danych wejściowych w locie, a zdarzenie nie jest uruchamiane we właściwym momencie (jquery 1.6). – zneak

Odpowiedz

3

Użyj zdarzenia onFocus w połączeniu z czekiem, aby upewnić się, że istnieje wartość. Działa to, ponieważ po wybraniu pliku i usunięciu okna dialogowego wyboru pliku OS, fokus jest zwracany do elementu wejściowego.

+0

Interesujące. Spróbuję tego. – zneak

+1

Byłby to oczywiście kod wyjątku IE. To nie działa w ogóle w Firefoksie. –