Подтвердить что ты не робот

Почему моя форма не загружает файлы в Internet Explorer 9?

Добро пожаловать в эпизод 32 342 343 из "Почему Internet Explorer сосать так много?"...

Я видел множество отчетов о том, что IE9 выполняет дрянные загрузки файлов. По-видимому, у него много предостережений, когда он будет или не будет работать (если у кого-то есть окончательный список, я бы с удовольствием его увидел). Однако большинство проблем/решений, которые я вижу, связаны с javascript, обычно с плагином формы jQuery или с чем-то похожим.

Моя форма не отправляется через AJAX, и поле ввода файла не скрывается или не отображается css. Тем не менее, я получаю несколько билетов на поддержку в день от пользователей в IE9, пытающихся отправить форму и "ничего не происходит" (= форма отправляется. Нет ошибок, но файл не загружен.) У меня нет единой жалобы с другой браузер, и IE8, похоже, работает (как и когда-либо).

Здесь верх моей формы. Я что-то пропустил?

<form action="http://mysite.dev/account-settings/?open=resume" method="post" class="wpjb-form" enctype="multipart/form-data">    

        <input type="hidden" name="resume_form" value="resume_form" />
        <fieldset class="wpjb-fieldset-default">

            <input id="firstname" name="firstname" type="hidden" class="regular-text " value="John" />
            <input id="lastname" name="lastname" type="hidden" class="regular-text " value="Henry" />
            <input id="email" name="email" type="hidden" class="regular-text " value="[email protected]" />

            <div class="wpjb-element-input-checkbox wpjb-element-name-is_active">
                <label class="wpjb-label">Show resume? </label>
                <div class="wpjb-field">
                    <label for="is_active_1"><input type="checkbox" class="" name="is_active" id="is_active_1" value="1" checked="checked" /> Yes <small style="display:inline;">(Uncheck to hide your resume)</small></label>

                </div>
            </div>
            <div class="wpjb-element-input-select-one wpjb-element-name-file">
                            <label class="wpjb-label">Upload a <i>new</i> resume file</label>
                <div class="wpjb-field">
                    <input style="line-height:1em;" id="file" name="file" type="file" class="regular-text " />
                    <small class="wpjb-hint">Accepted file types: doc, docx, odf, pdf, rtf</small>
                </div>
            </div>
        </fieldset>
        ...

Это происходит следующим образом: еще пара <fieldset> заканчивается следующим образом:

    ....
    <p class="submit">
        <input type="submit" name="Submit" id="wpjb_submit" value="Save Changes" />
    </p>
</form>

Обновление Я рад за всех, кто никогда не испытывал этой проблемы, но это не только я: http://answers.microsoft.com/en-us/ie/forum/ie9-windows_vista/cannot-upload-files-using-internet-explorer-9/5724d921-ae71-e011-8dfc-68b599b31bf5

Update2 Я вижу много предложений по добавлению метатега, чтобы заставить пользовательский агент IE8... <meta http-equiv="X-UA-Compatible" content="IE=8" /> Я не хочу этого делать, потому что, хотя я поддерживаю IE8, многие элементы на моем сайте отличаются по-разному в IE8 и IE9. Это создаст довольно неряшливый пользовательский опыт, так как любые пользователи IE будут испытывать временную "временную деформацию" на IE8 на этой конкретной странице.

4b9b3361

Ответ 1

Я смог исправить этот кошмар проблемы, обернув форму формы jQuery в setTimeout:

$('#complete_profile input[type="submit"]').click(function(){
  setTimeout(function() {
    $('#complete_profile form').submit();
  }, 0);
});

Это может привести к дублированию представления, когда форма подает, однако, будьте осторожны.

Ответ 2

Как говорит Грэм, я думаю, что это может быть проблемой сервера - также у меня никогда не было проблем с файловыми загрузками в IE9 (или новее) - я думаю, вы не хотите публиковать код PHP Script который обрабатывает загрузку?

Ответ 3

если какие-либо данные не отправляются, вы можете проверить почтовые данные с помощью скрытого ввода на стороне сервера script. Например, если вы используете php, это будет что-то вроде

<? if($_POST['resume_form']=='resume_form'){
    //Do something
} ?>

Или вы также можете использовать мета-теги для IE для отображения страницы, такой как IE8

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Ответ 4

Я предлагаю установить значение метатега X-UA-Compatible и посмотреть, не имеет значения.

См. этот вопрос для возможных значений: Что такое < meta http-equiv = "X-UA-Compatible" content= &quot, IE = край " > делать?

Возможно, также, что страница запускает нестандартный режим в IE9. Я предлагаю открыть страницу в IE9, открыть инструменты разработчика и посмотреть, какие режимы браузера/документа выбраны. Это может дать вам ключ. Обратите внимание, что атрибут формы "enctype" не поддерживался до IE8, поэтому, если браузер использует более старый режим doc, этот атрибут не распознается.

Ответ 5

ОК. Я бы предпочел оставить комментарий не ответом, но у меня пока нет очков!

  • Являются ли пользователи в режиме quirks? Большинство пользователей IE не знают о режиме quirks и, возможно, случайно щелкнули его при попытке обновить страницу (вместо нажатия F5). Если это прерывисто, это может быть причиной.

  • следующий сверху.. На стороне сервера, как вы проверяете пустые поля? Я больше разбираюсь в JS здесь, где вы часто ищете "", null и undefined Я просто думаю, что, возможно, режим quirks посылает некоторые нечеткие данные, что ваша проверка на стороне сервера отсутствует, потому что вы aren ' t ищет его, и, следовательно, отчеты все в порядке.