Выгрузить событие в HTML [duplicate]

Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы

0
задан 웃웃웃웃웃 20 August 2013 в 05:18
поделиться

4 ответа

Обратите внимание, что в вашем коде вы используете onbeforeclose, но имя события beforeunload, поэтому свойство onbeforeunload, а не onbeforeclose.

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

Нет. Вместо этого вам нужно будет захватить каждую ссылку и отправить форму и установить флаг, указывающий вашему обработчику onbeforeunload, чтобы он не возвращал строку или не удалял ваш обработчик onbeforeunload (возможно, флаг является более чистым).

Например:

var warnBeforeClose = true;
function unloadPage(){
    if (warnBeforeClose) {
        return "Your changes will not be saved.";
    }
}
window.onbeforeunload = unloadPage;

// ...when the elements exist:
$("a").click(dontWarn);
$("form").submit(dontWarn);
function dontWarn() {
    // Don't warn
    warnBeforeClose = false;

    // ...but if we're still on the page a second later, set the flag again
    setTimeout(function() {
        warnBeforeClose = true;
    }, 1000);
}

Или без setTimeout (но все еще с таймаутом):

var warningSuppressionTime = 0;
function unloadPage(){
    if (+new Date() - warningSuppressionTime > 1000) { // More than a second
        return "Your changes will not be saved.";
    }
}
window.onbeforeunload = unloadPage;

// ...when the elements exist:
$("a").click(dontWarn);
$("form").submit(dontWarn);
function dontWarn() {
    // Don't warn for the next second
    warningSuppressionTime = +new Date();
}

Обновление в 2017 году: Также обратите внимание, что с по крайней мере пару лет назад, браузеры не показывают сообщение, которое вы возвращаете; они просто используют тот факт, что вы вернули что-то другое, кроме null, в качестве флага, чтобы вместо этого отображать собственное встроенное сообщение.

5
ответ дан T.J. Crowder 24 August 2018 в 18:16
поделиться

Одним из простых решений вашей проблемы является наличие флага, а затем вызов вашей функции только в том случае, если флаг действителен. В этом случае вы можете привязать теги привязки, клавишу F5 и кнопку отправки формы, чтобы перейти к событиям, которые устанавливают флаг как false. Таким образом, ваша панель предупреждений будет видна только в том случае, если вышеуказанные случаи не выполняются:)

Вот сценарий:

var validNavigation = false;

function endSession() {
  // Browser or broswer tab is closed
  alert("bye");
}

function wireUpEvents() {

  window.onbeforeunload = function() {
      if (!validNavigation) {
         endSession();
      }
  }

  // Attach the event keypress to exclude the F5 refresh
  $(document).bind('keypress', function(e) {
    if (e.keyCode == 116){
      validNavigation = true;
    }
  });

  // Attach the event click for all links in the page
  $("a").bind("click", function() {
    validNavigation = true;
  });

  // Attach the event submit for all forms in the page
  $("form").bind("submit", function() {
    validNavigation = true;
  });

  // Attach the event click for all inputs in the page
  $("input[type=submit]").bind("click", function() {
    validNavigation = true;
  });

}

// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
  wireUpEvents();  
});
0
ответ дан Pratik 24 August 2018 в 18:16
поделиться

Проверить эту ссылку

Она дает вам информацию о том, как обрабатывать событие onbeforeunload.

Идея состоит в том, чтобы на странице был глобальный флаг. Когда в поля поменяются какие-либо изменения, этот флаг имеет значение true. При нажатии кнопки «Сохранить» этот флаг должен быть установлен на «false».

В событии onbeforeunload проверьте, является ли флаг истинным, а затем отобразите соответствующее сообщение.

var needToConfirm = true;

window.onbeforeunload = confirmExit;
function confirmExit()
{
    if (needToConfirm)
    {
        // check on the elements whether any change has been done on the fields.
        // If any change has been done, then set message here.
    }
}

function saveClicked()
{
    needToConfirm = false;
}
0
ответ дан Roy M J 24 August 2018 в 18:16
поделиться

DEMO

(запустите или обновите скрипт, чтобы увидеть сообщение о событии onbeforeunload() и нажмите ссылку «kk», он не будет показывать сообщение о событии onbeforeunload() Попробуйте это на своей веб-странице)

У меня есть решение для вас, вам нужно добавить событие onclick для каждого тега и всех.

Просто добавьте это в любое место на своих страницах .

<input type="hidden" value="true" id="chk"/>

и добавьте этот код в свой тег заголовка документа

<script>
window.onbeforeunload = confirmExit;
function confirmExit()
{
   if(document.getElementById("chk").value=="true")
   {
      return "Your changes will not be saved.";
   }
}

document.onclick = myClickHandler;
function myClickHandler() {
      document.getElementById("chk").value="false";
    }
<script>

Надеюсь, что это поможет

Спасибо

-1
ответ дан 웃웃웃웃웃 24 August 2018 в 18:16
поделиться
Другие вопросы по тегам:

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