2013-11-22 16 views
21

Mam formularz na stronie, coś prostego, jak:IE11 Tylko Prześlij Bug

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

To działa w każdej przeglądarce, w tym starszych wersji IE, ale w IE11 to się nie powiedzie, ze karta zatrzymany w ciągłej pętli ładowania, nigdy nie przechodząc na stronę "dziękuję" po przesłaniu. JEDNAK, jeśli otworzę konsolę, TO działa.

Jestem świadomy console.log wystawia IE ma, a już używam:

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

unikać jej, co wydaje się być się dobrze (jak wspomniano, każdy inny IE działa). Jaki jest wgląd w to, gdzie może leżeć problem?

+0

Czy używasz JavaScriptu do zdarzenia 'onsubmit'? Czy jest to po prostu "normalna" forma? –

+1

Czy na pewno tryb zgodności to 'wyłączony'? Czasami otwieranie konsoli programisty IE zmienia sposób renderowania i działania strony. – Nunners

+0

'console' ma więcej funkcji niż tylko' log', w zależności od przeglądarki. Może gdzieś trafiasz w błąd? – Halcyon

Odpowiedz

29

Problem pojawia się, gdy formularz zawiera tylko elementy wejściowe bez atrybutu name (lub bez elementów wejściowych). Znalazłem odniesienie do buga tutaj, chociaż zdarza się w trybie stacjonarnym, a nie w trybie tylko metro jak twierdzi link:

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

Rozwiązaniem jest stworzenie obojętne <input type="hidden" name="dummy" value="something"> pole (o nazwie i wartości zestaw) przed przesłaniem formularza.

Błąd występuje we wszystkich trybach zgodności oferowanych przez IE11.

+0

To mi się przydarza, ale ta poprawka nie zadziałała, może nowy błąd? –

+0

To nadal działa dla mnie. – tackeyy

6

Formularz bez nazwanego elementu spowoduje nieskończoną pętlę przy przesyłaniu na IE11 + W8.1. Aby to naprawić, wystarczy dodać atrybut nazwę przycisku:

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

możesz mieć dwa typy w ten sposób? – VBAHole

+0

Dzięki za zauważenie. Typo naprawiono! – Toto

10

Właśnie spędziłem WAY za dużo czasu na tym błędzie. Szaloną częścią jest to, że IE11 pozwala na składanie formularzy, jeśli masz otwarte narzędzia programistyczne (f12). Oto, co umieściłem przed przyciskiem przesyłania:

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

To błąd w IE11. Możesz to naprawić, jeśli dodasz atrybut nazwy do przycisku, na przykład:

<button type="submit" name="foo" ... 
+0

Zaraz, ale to nie zadziała bez dodanego atrybutu ** value **. –

0

Dla mnie miałem puste, ukryte pola, które zostały oznaczone jako wymagane. Całkiem głupie, ale to było rozwiązanie, które zadziałało dla mnie.

4

nie odnoszą się bezpośrednio do kwestii OP, ale jest IE-tylko kwestia złożenie formularza:

Jeśli zdarzy Ci ustawić form.prop('disabled', true) podczas imprezy przedstawienia, inne przeglądarki będą nadal wysyłać dane z formularza, ale IE nie będzie - wyśle ​​pustą treść żądania.

+0

O tym sprawdzić - ale brzmi to jak dokładny problem, z którym obecnie walczę! – Mark