Вопрос

У меня есть

<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>

И я хочу сделать так, чтобы, если вы нажмете эту кнопку, она также установила переменную, которая делает так, что если вы попытаетесь покинуть страницу, появится всплывающее окно с сообщением «Вы уверены, что хотите покинуть эту страницу?» оповещения, чтобы люди не могли случайно уйти во время загрузки.

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

Спасибо!

Это было полезно?

Решение

Добавьте это объявление на страницу:

var upcount = 0;

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

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) довольно старомодно и немного ограничивает (только один обработчик на событие для каждого элемента).Но это все еще работает.

Другие советы

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» к любому событию, которое вы хотите вызвать, прежде чем они уйдут (скажем, редактирование поля формы).

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top