2013-06-19 19 views
5

Przesyłam formularz i chcę uniemożliwić przesłanie, dopóki nie wykonam kilku innych czynności, takich jak wyświetlanie paska postępu podczas przesyłania plików. Ustawiam ten kod na podstawie pytań SO, takich jak event.preventDefault() function not working in IE.event.preventDefault w IE 10

$(document).ready(function(){ 
    $("#fileform").submit(function(e){ 
     if(!e) e = window.event; 
     if (e.preventDefault){ 
      // Firefox, Chrome 
      e.preventDefault(); 
     }else{ 
      // Internet Explorer 
      e.returnValue = false; 
     } 

     // other code 
    } 
} 

Wszystko działa poprawnie w przeglądarkach Firefox i Chrome; akcja wysyłania zostanie zablokowana, pojawi się pasek postępu, a następnie formularz zostanie przesłany, gdy go powiadomię. Jednak w IE 10 pierwszy warunek instrukcji if jest wykonywany, a formularz wydaje się próbować przesłać (wyświetlane są bańki IE 10). Dlaczego pierwszy warunek jest wykonywany?

Czy IE 10 obsługuje preventDefault(), gdzie IE 8 i 9 nie? Jeśli tak, to w jaki sposób poprawnie obsłużyć zapobieganie wysyłaniu formularza w IE 8, 9, 10, które nie będzie kolidowało z Firefoksem, Chrome, Safari itp.?

Odpowiedz

8

Po prostu wykonaj poniższe czynności, jQuery wykonała już dla Ciebie zadanie przeglądarki krzyżowej.

$("#fileform").submit(function(e){ 
    e.preventDefault(); 
    // other code 
}); 
+0

Kiedy używam tego kodu, nic się nie zmienia. Firefox i Chrome nadal działają dobrze, ale mój pasek postępu nie pojawia się w IE (pojawia się formularz IE, gdy pojawiają się bąbelki). –

+0

Nieważne, masz rację. Zdarzenie jest znormalizowane w jQuery, a e.preventDefault() działa zgodnie z oczekiwaniami. Dzięki. –

0

Spróbuj również umieścić następujące:

e.stopPropagation(); 

po

e.preventDefault(); 

http://api.jquery.com/event.preventDefault/

http://api.jquery.com/event.stopPropagation/

Jeśli czytasz: Stop form from submitting , Using Jquery

zobaczysz:

Becoz e.preventDefault() is not supported in IE. In IE it is e.returnValue = false 

Zmodyfikowany kod:

$("#fileform").submit(function(e){ 
     if(!e) e = window.event; 

     e.preventDefault(); 
     e.stopPropagation(); 

     // other code, do something here 
     return true; // or false if something goes wrong 
    } 
+1

Używanie 'e.preventDefault(); e.stopPropagation(); 'nie wyświetla żadnych zmian. –

+0

Zobacz zmodyfikowaną część kodu –

+0

Nadal nie ma różnicy. –

Powiązane problemy