Javascript и onbeforeunload? - PullRequest
       15

Javascript и onbeforeunload?

1 голос
/ 21 августа 2009

у меня

<span class="cssButton"><a href="javascript:void(0);" class="buttonBlue" onclick="swfu.startUpload();"> <img src="http://uber-upload.com/img/icons/up_16.png" alt=""/> Uber-Upload! </a></span>

И я хочу сделать так, чтобы, если вы нажмете эту кнопку, она также установила переменную, которая сделает так, что если вы попытаетесь покинуть страницу, появится одно из тех: Эта страница "предупреждает, чтобы люди не могли случайно уйти, когда идет загрузка.

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 августа 2009
function warnUser()
{
   if(dataIsDirty)
   {
      return "You have made changes. They will be lost if you continue.";
   }
   else
   {
      // Reset the flag to its default value.
      dataIsDirty = false;
   }
}

function isDirty()
{
   dataIsDirty = true;
}

function isClean()
{
    dataIsDirty = false;
}

Затем вы используете его, как на событии onbeforeunload.

window.onbeforeunload = warnUser;
dataIsDirty = false; //Or true, depending on if you want it to show up even if they dont' make changes)

Затем, чтобы использовать его, просто используйте функцию 'isClean' для всего, что вы не хотите запускать (например, для сохранения), или вы можете прикрепить 'isDirty' к любому событию, которое вы хотите запустить, прежде чем они уйдут (скажем, редактирование поля формы).

1 голос
/ 21 августа 2009

Добавить эту декларацию на страницу:

var upcount = 0;

Измените свой клик на:

onclick="++upcount; swfu.startUpload();"

Если swfu дает вам какое-то событие после завершения загрузки, поместите это на него:

--upcount;

И добавить этот обработчик:

window.onbeforeunload = function() {
    if (upcount > 0) {
        return "The upload is still in progress, leaving the page will cancel it.";
    }
}

Где браузеры уважают onbeforeunload, это будет работать. И большинство из них делают, большую часть времени. Там, где их нет, вы пытались. Обратите внимание, что с помощью счетчика вы можете загружать несколько файлов.

Вы можете рассмотреть attachEvent (IE) или addEventListener (стандартный) (или библиотеку, такую ​​как Prototype или jQuery, которая выравнивает различия для вас) для присоединения ваших событий вместо использования атрибутов. Использование атрибутов (иначе называемых обработчиками DOM0) довольно старомодно и немного ограничено (только один обработчик на событие на элемент). Но это все еще работает.

0 голосов
/ 21 августа 2009

Полагаться на onbeforeunload в лучшем случае отрывочно. Поскольку спаммеры злоупотребляли поведением так же, как вы предлагаете людям, возможность сделать это была в основном удалена.

Теперь вы можете отвечать только на onbeforeunload, если событие закрытия было вызвано активацией кнопки или чего-то подобного.

...