Hi,

I am new to Prototype and could use some assistance.  I am using
Prototype 1.6.0.1.

Scenario:

I have the following JS script elements included in the HEAD section
of every page. This effectively creates an auto-confirm functionally
when a user attempts to leave a modified form. Any form not decorated
with the "ignoreForm" CSS class, will first prompt the user to confirm
they want to exit without saving.


<!-- Create class which will allow forms to monitor themselves for
changes -->
<script type="text/javascript">

    var FormWatch = Class.create();

    FormWatch.prototype = {
        initialize : function(form, options) {
            this.submitted = false;

            this.form = $(form);

            // Let's serialize this.form and store it...
            // This will store the "original" state of the form
            this.formcontents = $(form).serialize();

            // On submit, we let the user changes pass thru without
prompting
            Event.observe(this.form, 'submit', function()
{this.submitted =
                true; }.bind(this));

            // On beforeunload event, we check for changes using our
confirmExit
            // method and prompt user to confirm, if necessary
            Event.observe(window, 'beforeunload',
this.confirmExit.bind(this));
           // Event.stop(ev);
        },
        confirmExit : function(ev) {
            // Serialize the form contents again
            this.newcontents = this.form.serialize();

            // Compare latest form contents with original form
contents
            // to see if anything has changed.
            if ((this.formcontents != this.newcontents) && !
(this.submitted)) {

               ev.returnValue = 'You have unsaved modifications to the
form data. If you leave without clicking the Save button, your changes
will be lost.';
           // return Event.stop(ev);
        }
    }
}


</script>

<script type="text/javascript">
// Utilizes Prototype JS lib
// On window load, loop thru forms on page which should not be
ignored.
// Register these forms with our modification listener so we can
prompt
// user to save changes. (see listener above)

 Event.observe(window, 'load', function() {

        // Get all forms on page
        var formArray =  $A($(document.getElementsByTagName('form')));

         // Loop thru forms, register any forms which do NOT have the
CSS
         // class "ignoreForm"
        formArray.each(function(aForm) {

        if (!($(aForm).hasClassName('ignoreForm'))) {
               new FormWatch(aForm);
        }

        });

        // Get all elements with a ignoreClick
        var linkArray = $A($(document.getElementsBy))

    });


    </script>



The above code works fine.

I need to incorporate the ability to selectively disable the
beforeUnload logic based on the CSS class of the element which
triggered the onPageUnload. In other words, I want the ability to
apply a CSS class of "ignore" to an <A> or <INPUT> element and have
the beforeUnload logic be ignored. This way, if I have a link which
opens a popup or something similar, I do NOT prompt the user whether
they want to save the form. The form processing would proceed as
usual.  I don't care how this is done, I played around with Event
listeners using CSS selectors and also thought about wrapping events,
but could not figure this out.

Any help would be appreciated.



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to rubyonrails-spinoffs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to