2011-01-24 3 views
20

У меня есть этот маленький кусочек кода:Как отключить действие beforeunload, когда пользователь отправляет форму?

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

Я удивляюсь, как я мог бы отключить этот запрос, когда пользователь нажимает кнопку отправки.

В основном что-то вроде здесь, на SO. Когда вы задаете вопрос и решаете закрыть страницу, вы получаете окно с предупреждением, но это не происходит, когда вы отправляете форму.

ответ

34

Вызов unbind с помощью обработчика beforeunload событий:

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

Чтобы предотвратить форму от их представления, добавьте следующую строку:

return false; 
+0

добавьте следующую строку: 'возвращение ложным;', но где я добавить эту строку? – Kiquenet

15

Использование

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

Убедитесь, что вы имейте это перед тем, как вы отправите основную функцию! (Если таковые имеются)

+0

для меня это сработало, пока ответ Якова Релкина не ответил – tObi

0

Это то, что мы используем:

В документе готовы мы называем функцию beforeunload.

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

Перед отправкой или размещением.отгрузки мы отвязываем переменную.

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

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

В поисках Detect onbeforeunload для веб-приложений ASP.NET хорошо я был, Я показать предупреждающее сообщение, если некоторые изменения управления ввода на странице с помощью ASP.NET с мастер-страницы и содержимого страницы. Я использую 3 заполнители контента на главной странице, а последний после формы

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

так после закрытия формы тега и перед закрывающим тегом тела используется этот скрипт

<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 Безразлично Таким образом, мы надежно работаем, насколько это необходимо. Вы должны назначить его изначально

, так что я получил его, как этот bind и unbind, не сработал для меня. С jQuery 1.7 с обновлением API событий был добавлен .bind() /. Unbind() для обратной совместимости, но предпочтительным методом является использование функций 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 –

Смежные вопросы