2011-01-24 26 views
20

Tôi có mảnh này ít mã:Làm cách nào để vô hiệu hóa hành động tải trước khi người dùng gửi biểu mẫu?

<script> 
$(window).bind('beforeunload', function() { 
    $.ajax({ 
    async: false, 
    type: 'POST', 
    url: '/something' 
    }); 
    }); 
</script> 

Tôi tự hỏi, làm thế nào tôi có thể vô hiệu hóa yêu cầu này khi người dùng chạm vào nút gửi.

Về cơ bản giống như ở đây, trên SO. Khi bạn đặt câu hỏi và quyết định đóng trang, bạn sẽ nhận được một cửa sổ cảnh báo, nhưng điều đó không xảy ra khi bạn gửi biểu mẫu.

Trả lời

34

Gọi unbind sử dụng bộ xử lý beforeunload sự kiện:

$('form#someForm').submit(function() { 
    $(window).unbind('beforeunload'); 
}); 

Để ngăn chặn các hình thức khỏi bị nộp, thêm dòng sau:

return false; 
+0

thêm dòng sau: 'return false;', nhưng nơi tôi thêm dòng đó? – Kiquenet

15

Sử dụng

$('form').submit(function() { 
    window.onbeforeunload = null; 
}); 

Hãy chắc chắn rằng bạn có điều này trước khi bạn gửi chính chức năng! (nếu có)

+0

cho tôi điều này làm việc trong khi câu trả lời Jacob Relkin 'không – tObi

0

Đây là những gì chúng tôi sử dụng:

Trên tài liệu sẵn sàng, chúng tôi gọi hàm beforeunload.

$(document).ready(function(){ 
    $(window).bind("beforeunload", function(){ return(false); }); 
}); 

Trước khi gửi hoặc location.reload, chúng tôi không hủy biến.

$(window).unbind('beforeunload'); 
formXXX.submit(); 

$(window).unbind("beforeunload"); 
location.reload(true); 
0

Looking for Detect onbeforeunload cho ứng dụng web ASP.NET cũng tôi, Tôi đã để hiển thị thông báo cảnh báo nếu một số thay đổi kiểm soát đầu vào trên trang bằng cách sử dụng ASP.NET với Master Page và trang nội dung. Tôi đang sử dụng 3 placeholders nội dung trên trang chủ và là người cuối cùng sau khi các hình thức

<form runat="server" id="myForm"> 

nên sau thẻ hình thức đóng cửa và trước khi cơ thể đóng thẻ sử dụng kịch bản này

<script> 
     var warnMessage = "Save your unsaved changes before leaving this page!"; 
     $("input").change(function() { 
      window.onbeforeunload = function() { 
       return 'You have unsaved changes on this page!'; 
      } 
     }); 
     $("select").change(function() { 
      window.onbeforeunload = function() { 
       return 'You have unsaved changes on this page!'; 
      } 
     }); 
     $(function() { 
      $('button[type=submit]').click(function (e) { 
       window.onbeforeunload = null; 
      }); 
     }); 
    </script> 

beforeunload doesn 't làm việc đáng tin cậy theo cách này, như xa như ràng buộc đi. Bạn nên gán nó natively

vì vậy tôi nhận được nó làm việc như thế này ràng buộc và unbind đã không làm việc cho tôi cũng Với jQuery 1.7 trở đi API sự kiện đã được cập nhật, .bind() /. Unbind() vẫn có sẵn cho khả năng tương thích ngược, nhưng phương thức ưa thích là sử dụng các hàm on()/off().

0
<!DOCTYPE html> 
<html> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.dirtyforms/2.0.0-beta00006/jquery.dirtyforms.min.js"></script> 
    <script type="text/javascript"> 
    $(function() { 
     $('#form_verify').dirtyForms(); 
    }) 
    </script> 
    <title></title> 
<body> 
<form id="form_verify" action="a.php" method="POST"> 
    Firt Name <input type="text"> 
    Last Name <input type="file"> 
    <input type="submit"> 
</form> 

+1

https://github.com/snikch/jquery.dirtyforms –

Các vấn đề liên quan