it-roy-ru.com

IE11-Only Submit Bug

У меня есть форма на странице, что-то простое, как:

<form action="form/submit" method="post">
    <button type="submit">Submit</button>
</form>

Он работает в каждом браузере, включая более старые версии IE, но в IE11 происходит сбой, вкладка застревает в цикле непрерывной загрузки, никогда не переходя на страницу «спасибо» после отправки. ОДНАКО, если я открою консоль, она работает. 

Я знаю о проблемах console.log IE, и уже использую:

if (!window.console) {
    console = {
        log: function() {}
    };
}

чтобы избежать этого, что, кажется, хорошо (как уже упоминалось, все остальные IE работают). Любое понимание того, где проблема может лежать?

23
Brian

Проблема возникает, когда форма имеет только элементы ввода без атрибута name (или без элементов ввода). Я нашел ссылку на ошибку здесь, хотя это также происходит в режиме рабочего стола, а не только в режиме метро, ​​как утверждает ссылка:

http://connect.Microsoft.com/IE/feedback/details/807447/ie-11-metro-version-submitting-form-fails-if-input-tag-has-no-name-attribute

Исправление заключается в создании фиктивного поля <input type="hidden" name="dummy" value="something"> (с указанием имени и значения) перед отправкой формы.

Ошибка происходит во всех режимах совместимости, предлагаемых IE11.

30
pilif

Я просто потратил слишком много времени на эту ошибку. Сумасшедшая часть в том, что IE11 разрешает отправку формы, если у вас открыты инструменты dev (f12). Вот что я поставил перед своей кнопкой отправки:

<input type="hidden" name="ie11sux" id="ie11sux" value="<?php echo md5(microtime()."ie11sux"); ?>"/>
10
user3137534

Это ошибка в IE11. Вы можете исправить это, добавив атрибут имени к кнопке, например:

<button type="submit" name="foo" ...
9
Alex Baban

Форма без именованного элемента приведет к бесконечному циклу при отправке в IE11 + W8.1. Чтобы это исправить, просто добавьте атрибут name к кнопке:

<form action="form/submit" method="post">
  <input type="submit" name="cm" value="Submit">
</form>
6
Toto

Это не имеет прямого отношения к вопросу OP, но является проблемой отправки формы только для IE:

Если вам случится установить form.prop('disabled', true) во время события отправки, другие браузеры все равно будут отправлять данные формы, но IE не будет - он отправит пустое тело запроса.

4
Kevin Qi

Для меня у меня были пустые скрытые поля, которые были помечены как обязательные. Довольно глупо, но это было решение, которое сработало для меня.

0
Jake Cattrall

Для IE11 есть:

event.returnValue = false;

Проверка существования event.preventDefault предотвращает возможную ошибку:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
0
DependencyHell