Jquery перед тем как покинуть страницу несохраненных изменений - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть диалоговое окно jquery, в котором есть текстовые поля Kendo, выпадающие списки и выпадающие списки. Я хочу предупредить пользователей перед закрытием диалога несохраненными изменениями, если пользователи внесли изменения. В настоящее время он предупреждает, когда я делаю некоторые изменения и пытаюсь закрыть модальное окно. Но дело в том, что он все время предупреждает, если я даже изменю одно текстовое поле, щелкните другие текстовые поля для редактирования. Я просто хочу, чтобы он предупреждал пользователей только один раз, когда они закончили модификацию sh, и попытался закрыть диалог.

Вот мой код

    $('.ui-button').mousedown(function () {
        if ($(":input").change(function (e) {
            var dirtyFlagMsg = confirm('Are you sure you want to close without saving?');
            if (dirtyFlagMsg == true) {
                $("#popUpEdit").dialog("close");
                $("#popUpNew").dialog("close");
            }
            else e.preventDefault();
        }));
    });

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

onbeforeunload - это событие, которое поможет вам спросить пользователя, хочет он покинуть страницу или нет.

function myFunction() {
  return"";
}
<!DOCTYPE html>
<html>
<body onbeforeunload="return myFunction()">

<p>TRY CLICK LINK</p>

<a href="https://www.google.com"> go to another page</a>

</body>
</html>
0 голосов
/ 03 марта 2020

Прежде всего, вы смешиваете груши и яблоки, jquery dialog и onbeforeunload - это две разные вещи. Я думаю, что вы хотите закрыть диалог, а не окно (название вопроса вводит в заблуждение).

Вам не нужно отслеживать каждое mousedown событие, вам нужно вызвать функцию в диалоговом окне перед событием закрытия.

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

Примерно так (не проверено):

$("#dialog").dialog({
   beforeClose: function(){
     var isDirty = //logic for dirty check of inputs
     if(isDirty){
        if(confirm("Are you sure you want to close without saving?")){
            return true;
        } else {
            return false;
        }
     }

     return true;
   }
});

Конечно, я использую обычный браузер подтверждение, поэтому вам нужно будет использовать свой собственный лог c для подтверждения диалога. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...