onBeforeUnload создает приглашение, даже если функция ничего не возвращает - PullRequest
1 голос
/ 20 сентября 2019

У меня есть страница на моем сайте для ввода некоторых значений.Они могут быть сохранены и изменены позже.Я хочу, чтобы подсказка появлялась, когда пользователь пытается покинуть страницу, но только при наличии несохраненных данных.У меня есть код, чтобы определить, если значение сохраняется или не работает нормально.В функции, которую я назначаю window.onBeforeUnload, она должна либо вернуть строку, если есть несохраненное значение, либо ничего, если ничего не было введено / все сохранено.Однако в Firefox и Internet Explore появляется предупреждение о несохраненных изменениях, даже если функция ничего не возвращает (что будет неопределенным).Хром отлично работает.

Я попытался вместо этого прикрепить событие к окну через addEventListener, и тот же результат был получен.Я также удалил evt.preventDefault() и evt.stopPropagation(), и он все еще появляется.Я попытался установить evt.returnValue на ноль и delete evt['returnValue'], и он все еще появляется.

Код выглядит так:

componentDidMount() {
    window.onbeforeunload = this.warnUnsaved;
}

warnUnsavedRecords = (evt) => {
    if (evt) {
       evt.preventDefault();
       evt.stopPropagation();
    }

    if (this._unsaved) {
       return "There are unsaved records.";
    }
    return;
}

Даже добавление console.log доказывает, что оно достигаетreturn и все же это все еще происходит.

1 Ответ

1 голос
/ 21 сентября 2019

Обычно удаления части evt.preventDefault(); должно быть достаточно.Это работает для меня в FF по крайней мере.

...