2013-06-19 4 views
5

Я представляю форму, и я хочу предотвратить действие отправки, пока не сделаю еще несколько действий, например, показывая индикатор выполнения для загрузки файлов. Я настроил этот код на основе SO вопросов, таких как event.preventDefault() function not working in IE.event.preventDefault в 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 
    } 
} 

Все работает отлично в Firefox и Chrome; действие отправки предотвращается, появляется индикатор выполнения, после чего форма отправляется, когда я говорю. Тем не менее, в IE 10 выполняется первое условие оператора if, и форма, кажется, пытается подать (появляются пузыри представления IE 10). Почему выполняется первое условие?

Поддерживает ли IE 10 предупреждениеDefault(), где IE 8 и 9 не было? Если да, то как мне надлежащим образом обрабатывать предотвращение действия отправки формы в IE 8, 9, 10, которые не будут мешать Firefox, Chrome, Safari и т. Д.??

ответ

8

Просто выполните ниже, jQuery уже выполнил работу с кросс-браузером для вас.

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

Когда я использую этот код, ничего не меняется. Firefox и Chrome все еще работают нормально, но мой индикатор выполнения не отображается в IE (появляются формы IE формы). –

+0

Ничего, ты прав. Событие нормализуется в jQuery, а e.preventDefault() работает должным образом. Благодарю. –

0

Try также поставить следующее:

e.stopPropagation(); 

после

e.preventDefault(); 

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

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

Если вы читаете: Stop form from submitting , Using Jquery

вы увидите:

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

Измененный код:

$("#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

Использование 'e.preventDefault(); e.stopPropagation(); 'не изменяет. –

+0

См. Измененную часть кода –

+0

Все еще нет разницы. –