Предотвращение потери данных формы

hammet

Новичок
Предотвращение потери данных формы

Передо мной интранет приложение, в котором много веб-форм. Хочу добавить некий функционал, позволяющий предотвратить потерю данных формы, если пользователь забыл нажать кнопку Save.
К примеру, пользователь заполнил форму, забыл сохранить и нажал какую либо ссылку в меню, либо попытался закрыть окно браузера, либо нажал отмена - в таком случае появляется confirmation dialog с просьбой подтвердить несохранение введенных данных.
Пол дела - добавить observer, который будет отслеживать изменение состояния формы, т.е. было ли хотя бы одно поле формы изменено и записывать в bool переменную, а также отслеживать закрытие браузера. Но как отслеживать уход со страницы?
Еще одна сложность - приложение написано на основе фреймверка Prado, который весь document body оборачивает в форму, единственную форму, аналогичную html form элементу. Не все стандартные js решения можно применять.
http://www.pradosoft.com/docs/manual/System.Web.UI/TForm.html

Высказывайтесь, если у кого-то есть мысли по поводу приведеной задачи, буду признателен за помощь.
 

x-yuri

Новичок
а если пользователь окно закрыл?
мож автоматическое сохранение в черновики? Или индикатор, что форма не была сохранена?
 

hammet

Новичок
небольшие наброски (используя prototype)

PHP:
$(document).observe('dom:loaded', function(evt) {

    window.onbeforeunload = function(evt) {
        var saving = form.hasClassName('saving')
        if(!saving && hasChanged()){
            if (typeof evt == 'undefined') {
                evt = window.event
            }
            evt.returnValue = 'All changes would be lost!'
        }
    }


    var form = $(document.forms[0])
    var formElements = form.elements


    form.onsubmit = function(evt) {
        form.className = 'saving';
    }

    form.onreset = function(evt) {
        form.className = '';
    }

    form.onchange = function(evt) {
        form.className = '';
    }
    

    function hasChanged(){

        for(var i=0; i<formElements.length; i++){

            var formField = formElements[i]
            var formFieldType = formField.type

            if(formFieldType == 'text' || formFieldType == 'textarea'){
                if(formField.value != formField.defaultValue){
                    return true
                }
            } else if(formFieldType == 'checkbox' || formFieldType == 'radio'){
                if(formField.checked != formField.defaultChecked){
                    return true
                }
            } else if(formFieldType == 'select-one' || formFieldType == 'select-multiple') {
                if(formField.options.selectedIndex != 0){
                    return true
                }
            }
        }

        return false
    }
-~{}~ 22.05.09 14:49:

http://htmlcoder.visions.ru/JavaScript/?26

статья по теме, если вдруг кто-то еще столкнётся с этим
 
Сверху