2013-06-19 14 views
5

Tôi đang gửi biểu mẫu và tôi muốn ngăn tác vụ gửi cho đến khi tôi thực hiện một số thao tác khác như hiển thị thanh tiến trình để tải lên tệp. Tôi thiết lập mã này dựa trên các câu hỏi SO như event.preventDefault() function not working in IE.event.preventDefault trong 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 
    } 
} 

Mọi thứ hoạt động tốt trong Firefox và Chrome; hành động gửi được ngăn chặn, thanh tiến trình xuất hiện và sau đó biểu mẫu được gửi khi tôi yêu cầu. Tuy nhiên, trong IE 10, điều kiện đầu tiên của câu lệnh if được thực hiện và biểu mẫu có vẻ như đang cố gửi (các bong bóng gửi của IE 10 hiển thị). Tại sao điều kiện đầu tiên được thực hiện?

Hỗ trợ IE 10 có ngăn chặnDefault() trong đó IE 8 và 9 không? Nếu vậy, làm cách nào để xử lý đúng cách ngăn chặn hành động gửi biểu mẫu trong IE 8, 9, 10 sẽ không ảnh hưởng đến Firefox, Chrome, Safari, v.v ...?

Trả lời

8

Chỉ cần làm như dưới đây, jQuery đã thực hiện công việc trình duyệt chéo cho bạn.

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

Khi tôi sử dụng mã này, không có gì thay đổi. Firefox và Chrome vẫn hoạt động tốt, nhưng thanh tiến trình của tôi không xuất hiện trong IE (biểu mẫu trình duyệt IE xuất hiện). –

+0

Nevermind, bạn nói đúng. Sự kiện được chuẩn hóa trong jQuery và e.preventDefault() hoạt động như mong đợi. Cảm ơn. –

0

Hãy thử cũng đặt như sau:

e.stopPropagation(); 

sau

e.preventDefault(); 

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

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

Nếu bạn đọc: Stop form from submitting , Using Jquery

bạn sẽ thấy:

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

Mã sửa đổi:

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

Sử dụng 'e.preventDefault(); e.stopPropagation(); 'cho thấy không có thay đổi. –

+0

Xem phần đã sửa đổi của mã –

+0

Vẫn không có sự khác biệt. –