Ввод ввода файла IE9 с использованием Javascript

У меня был пост здесь:

.change, действующий странно в IE9

Однако я столкнулся с новым инцидентом, связанным с обработкой формы загрузки файлов, и мне было любопытно, если кто-то столкнулся с этой проблемой.

Моя первоначальная проблема заключалась в том, что я не мог заставить событие onchange работать, и я подумал, что это проблема с моим javascript, но я обнаружил, что это связано с тем, как эта форма активируется.

У меня есть вход в файл

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

теперь я сделал 2 вещи.

Я скрыл вход и создал кнопку (для лучшего управления стилем), которая активирует ввод.

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

а затем JS для взаимодействия между ними:

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

и, конечно, submit для формы (я использую родительский элемент в этом примере, но в моем фактическом коде я использую идентификатор формы).

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

Когда я нажимаю "mybutton", ожидается ожидаемый результат, откроется окно просмотра и позволяет выбрать файл с моего компьютера. Также, когда я изменяю файл во всех браузерах, кроме IE, запускается событие onchange. Теперь, если я покажу форму и вручную нажмите кнопку "просмотреть" и выберете файл, событие onchange будет запущено. Таким образом, в основном браузер рассматривает нажатие кнопки фактического файла иначе, чем выполнение $( "input [type = file]" ). Click()

Кто-нибудь знает, как это исправить?

Ответ 1

Как уже было сказано, IE очень строг при отправке формы, содержащей входные файлы. Ввод файлов должен запускаться с помощью реального щелчка мыши, чтобы разрешить отправку формы. Additionnaly, кажется, есть ошибка с IE9 и файлами.

Хорошей новостью является то, что существует способ обойти ограничение безопасности от IE с помощью метки:

  • Создайте стандартный тег метки, связанный с вводом вашего файла. Метка запускает входной файл, как обычно.
  • Смазывайте ярлык как кнопку с помощью CSS.
  • Вход файла должен отображаться (для IE8), но может быть скрыт с помощью "видимости: скрытый". IE8 примет этот хак.

Ответ 2

Если я не ошибаюсь, вы не можете изменить это, поскольку это (изначально) предназначено для защиты конфиденциальности пользователей, избегая в любом случае загрузки файлов без явного разрешения пользователя/действия.

Ответ 3

  • убедитесь, что ваш код находится в $("document").ready(function(){... here..});

  • Кажется, что входы файлов при подключении с помощью .live("change", function(){}); не работают хорошо

другой стиль - это что-то еще, но CSS не так уж сложно - красивая загрузка файла