Ошибка ввода в IE9
Мне просто интересно, есть ли у кого-нибудь информация или отзывы о ситуации, в которой я нахожусь.
В настоящее время я сталкиваюсь с проблемой "Double Form Submit", когда я один раз нажимаю кнопку "Отправить", и она отправляет форму дважды. Это происходит только в IE9, но я тестировал только Safari, Chrome (последний), FF (Ver 5/6), IE8 и IE9.
Вот код:
<!DOCTYPE html>
<html lang="en-us" dir="ltr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>IE9 test</title>
</head>
<body>
<h1>Testing</h1>
<form method="POST" id="submit_form">
<input type="text" name="x" value="xxxx" />
<input type="text" name="y" value="yyyy" />
<button type="submit" class="btn_sign_in" id="btn_logon" onclick="this.disabled=true;document.forms[0].submit();">Submit</button>
</form>
</body>
</html>
Проблемная часть:
onclick="this.disabled=true;document.forms[0].submit();"
Код был на моем сайте целую вечность, и это первый раз, когда я столкнулся с проблемой двойного отправки, поскольку IE9 выпускает только этот год, и, вероятно, в эти дни все больше людей используют IE9, и, следовательно, я получил жалобы пользователей об этой проблеме.
Самая сложная проблема заключается в том, что проблема двойного представления не всегда воспроизводима. Иногда он будет дважды подчиняться, иногда он будет отправляться один раз.
Моя текущая работа меняется от:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
и измените на:
<meta http-equiv="X-UA-Compatible" content="IE=8" >
Это заставляет IE9 использовать совместимость с IE8, и он правильно выполнит Javascript для отправки.
Я назвал поддержку Microsoft, и они утверждают, что это "проблема совместимости с Javascript", поэтому нам нужно будет точно настроить наш Javascript, чтобы наш сайт работал правильно в IE9.. (Duh!)
В любом случае, мой код:
onclick="this.disabled=true;document.forms[0].submit();"
уже не так? Потому что, несмотря на то, что другие браузеры не жалуются, но, вероятно, это не правильно, чтобы начать с?
Я надеюсь, что если кто-то также столкнется с подобными проблемами, у вас будет больше информации или отзывов.
В настоящее время, если я не изменю X-UA-совместимый с IE = 8, я могу изменить свой код на:
onclick="this.disabled=true;"
Это также решит проблему с двойным отправкой, но есть ли также список проблем совместимости IE9, которые мы должны принять к сведению?
Спасибо!
Ответы
Ответ 1
Этот код неверен:
onclick="this.disabled=true;document.forms[0].submit();"
Javascript onclick не гарантирует, что обычный submit также не будет выполнен. Для этого ему нужно вернуть false, например:
onclick="this.disabled=true;document.forms[0].submit(); return false;"
Является ли это изменение в поведении ошибкой IE9? Это зависит от этого, это может зависеть от правового поведения, которое является результатом сроков. Это только ошибка, если стандарт DOM/Javacript гарантирует, что document.submit() является завершением всего выполнения в документе. Я сомневаюсь, что это так.
Ответ 2
Сбрасывая сложность, проблема заключается в том, что IE9 представляет формы два раза с
одна кнопка нажимает, когда событие отправки запускается в javascript.
В общем, я нашел, что это исправляет двойной IE9
проблема подачи формы:
(с ошибкой IE9 с двойным представлением HTML):
<input type="submit" />
(исправление IE9 html double):
<input type="submit" onclick="return false; " />
В основном, я обрабатываю отправку формы в javascript (не показан) с помощью прослушивателя событий (щелчок), но возвращаю false для старого обработчика событий в школе (onclick), который, как представляется, IE9 вызывает автоматически, даже если вы уже обработали это через прослушиватель событий.
Я предполагаю, что вы можете сделать то же самое в чистом javascript:
inputElement.onclick = function(){ return false; };
но я не тестировал его.
Ответ 3
так как у вас уже есть код для выполнения .submit(), почему бы не изменить тип кнопки на простую кнопку вместо отправки?
Ответ 4
Я не знаю точно, что это проблема, но, переведя на простой английский, ваш код, кажется, говорит: "Нажав кнопку" Отправить ", отключите атрибут" Истина ", а затем отправьте форму".
Но, поскольку нажатие кнопки отправки уже отправляет форму, возможно, ваш браузер получает два запроса на отправку - один раз, когда вы нажимаете кнопку, и второй раз, когда ваш javascript сообщает, что он отправляет.
Если вы не делаете ajax, просто обычный submit, вы должны иметь возможность return true
вместо вызова submit
- по существу, сообщить браузеру, чтобы он выполнил действие по умолчанию (которое отправлено).
Или действительно, полностью уничтожьте всю часть submit()
, так как она избыточна.
Ответ 5
Часть проблемы заключается в том, что я считаю, что вы отправляете дважды. Вам нужно остановить первое событие, прежде чем вы начнете второй. См. Это сообщение для получения дополнительной информации об остановке событий с использованием встроенного javascript: Как остановить распространение события с помощью встроенного атрибута onclick?
Ответ 6
Когда вы используете
onclick="document.forms[0].submit();"
в кнопке отправки напишите input type="button"
вместо type="submit"
,
Ответ 7
у нас была та же проблема в IE9, и мы решили проблему, установив cancelBubble и returnValue флаги события в true и false соответственно.