Отключить onbeforeunload для отправки [duplicate]

В то время как , что вызывает NullReferenceExceptions и подходит к avoid / fix , такое исключение было рассмотрено в других ответах, что многие программисты не имеют " t узнал еще, как независимо отлаживать такие исключения во время разработки.

В Visual Studio это обычно легко благодаря Visual Studio Debugger .


Во-первых, убедитесь, что правильная ошибка будет обнаружена - см. . Как разрешить нарушение «Исключение System.NullReferenceException» в VS2010? Примечание1

Затем либо Начать с отладки (F5) , либо Приложить [отладчик VS] к запуску процесса . Иногда может быть полезно использовать Debugger.Break , в котором будет предложено запустить отладчик.

Теперь, когда NullReferenceException выбрано (или необработанно), отладчик остановится ( помните правило, указанное выше?) в строке, на которой произошло исключение. Иногда ошибка может быть легко обнаружена.

Например, в следующей строке единственный код, который может , вызывает исключение, если myString имеет значение null. Это можно проверить, посмотрев окно Watch или выполнив выражения в окне Immediate Window .

var x = myString.Trim();

В более сложных случаях, таких как следуя ниже, вам нужно будет использовать один из методов выше (Watch или Immediate Windows) для проверки выражений, чтобы определить, было ли str1 пустым или если str2 имеет значение null.

var x = str1.Trim() + str2.Trim();

Once , где было выбрано исключение, это обычно тривиально по отношению к разуму назад, чтобы выяснить, где введенное значение null было [неправильно] -

. Найдите время, необходимое для понимания причина исключения. Проверьте нулевые выражения. Проверьте предыдущие выражения, которые могли бы привести к таким нулевым выражениям. Добавьте контрольные точки и, по мере необходимости, пройдите через программу. Используйте отладчик.


1 Если Break on Throws слишком агрессивен и отладчик останавливается на NPE в библиотеке .NET или сторонних разработчиков, Break на User-Unhandled можно использовать для ограничения выловленных исключений. Кроме того, VS2012 представляет Just My Code , который я рекомендую также включить.

Если вы отлаживаете с включенным Just My Code, поведение немного отличается. При включенном Just My Code отладчик игнорирует исключения, связанные с привилегиями обычного языка (CLR) первого шанса, которые выходят за пределы My Code и не проходят через My Code

blockquote>

20
задан pawelmysior 24 January 2011 в 23:32
поделиться

5 ответов

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

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

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

   return false;
35
ответ дан Dave Jarvis 26 August 2018 в 05:56
поделиться
 <!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>

0
ответ дан Anup Panwar 26 August 2018 в 05:56
поделиться

Использовать

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

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

18
ответ дан Chris Forrence 26 August 2018 в 05:56
поделиться

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

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

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

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

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

$(window).unbind("beforeunload"); 
location.reload(true);
0
ответ дан David 26 August 2018 в 05:56
поделиться

Ищете для обнаружения 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
ответ дан dnxit 26 August 2018 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: