Активация OnBeforeUnload ТОЛЬКО, когда значения полей изменились

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

Я думаю, у вас есть два варианта:

  1. выбрасывать исключение. Таким образом, клиент должен обрабатывать это каким-то образом (и по этой причине я либо документирую это, и / или проверяю). Недостатком является то, что исключения являются медленными и не должны использоваться для потока управления, поэтому я использую это для исключительных обстоятельств (каламбур)
  2. Вы можете использовать шаблон NullObject .

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

21
задан xyz 28 October 2014 в 05:58
поделиться

3 ответа

Попробуйте свою логику другим способом. Это означает, что поместите логику для проверки значения поля ввода в свой метод onbeforeunload .

window.onbeforeunload = function () { 
    if ($("#is_modified").val() == 'true') { 
        return "You have unsaved changes."; 
    } else { 
        return true; // I think true is the proper value here 
    } 
};
1
ответ дан 29 November 2019 в 20:13
поделиться

почему бы не вызвать метод onbeforeunload функция, которая проверяет, изменились ли значения, и если да, возвращает подтверждение «несохраненных изменений»?

0
ответ дан 29 November 2019 в 20:13
поделиться

Мы просто используем Window.onbeforeunload как наш «измененный» флаг. Вот что мы делаем (с использованием lowpro):

Event.addBehavior({
  "input[type=radio]:change,input[type=text]:change,input[type=checkbox]:change,select:change": function(ev) {
       window.onbeforeunload = confirmLeave;
  }
  ".button.submit-button:click": function(ev) {
       window.onbeforeunload = null;
  },
});


function confirmLeave(){
    return "Changes to this form have not been saved. If you leave, your changes will be lost."  
}
7
ответ дан 29 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

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