another idea ... why not using another event, let's say onmouseover and onmouseout to deactivate/activate the observer for the form? In this case you might be save clicking a button which shall not trigger the beforeunload event.
as I said .. it's just an idea .. hf Bastian On Wed, May 21, 2008 at 4:17 PM, Mike P <[EMAIL PROTECTED]> wrote: > > Actually the Event.element will return the DOM element on which the > event occurs. So, in this case it seems, that within the beforeUnload > function, the event "beforeUnload" is tied to the document. I am not > sure how to determine which element triggered the whole chain of > events (the click on the <a> element) > > However, thanks for your input > > On May 21, 10:09 am, "Bastian Feder" <[EMAIL PROTECTED]> wrote: >> mmh ... that's strange .. >> Ashttp://prototypejs.org/api/event/elementshows it should return the >> element triggering the event .. or am I bad at rerading ?! >> >> Eventually the findElement (http://prototypejs.org/api/event/findElement) >> will help instead .. >> >> hf >> Bastian >> >> >> >> On Wed, May 21, 2008 at 4:00 PM, Mike P <[EMAIL PROTECTED]> wrote: >> >> > Thanks for the reply. >> >> > The problem with the approach you mention is that the "activator" >> > variable at that point is bound to the document and not the element >> > which triggered the unload event. >> >> > I could be missing something because I am new to this. But, whilst >> > looking at the JS using FireBug, activator variable is equal to >> > #document. >> >> > Is there some way to determine which element triggered this event...? >> >> > thanks again >> >> > On May 21, 9:43 am, "Bastian Feder" <[EMAIL PROTECTED]> wrote: >> >> Ah ... >> >> >> forgot the 'return' to leave the function ... >> >> >> // my suggest: >> >> >> var activator = Event.element(ev); >> >> if (activator.hasClassName('ignore')){ >> >> Event.stop(ev); >> >> // alert("event stopped"); >> >> >> return false;} >> >> >> // end >> >> >> hope that helps >> >> >> Bastian >> >> >> On Wed, May 21, 2008 at 3:41 PM, Bastian Feder <[EMAIL PROTECTED]> wrote: >> >> > Hey! >> >> >> > my first guess is to find the element who is causing the event and >> >> > then stopping it. >> >> > I mean something like: >> >> >> > --- snip --- >> >> > confirmExit : function(ev) { >> >> >> > // my suggest: >> >> >> > var activator = Event.element(ev); >> >> > if (activator.hasClassName('ignore')){ >> >> > Event.stop(ev); >> >> > // alert("event stopped"); >> >> > } >> >> > // end >> >> >> > // 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); >> >> > } >> >> >> > --- snip --- >> >> >> > I did not test this since I currently have no time for deeper >> >> > investigation, but I hope this helps. >> >> >> > hf >> >> > Bastian >> >> >> > On Wed, May 21, 2008 at 3:20 PM, Mike P <[EMAIL PROTECTED]> wrote: >> >> >> >> 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. >> >> >> > -- >> >> > -- >> >> > spread the word ... seewww.browsehappy.com;o) >> >> >> > Calvin: Weekends don't count unless you spend them doing something >> >> > completely pointless. >> >> >> > Join the Greater IBM Connection >> >> > (http://www.xing.com/premiumgroup-6291.d26b7d) >> >> >> -- >> >> -- >> >> spread the word ... seewww.browsehappy.com;o) >> >> >> Calvin: Weekends don't count unless you spend them doing something >> >> completely pointless. >> >> >> Join the Greater IBM Connection >> >> (http://www.xing.com/premiumgroup-6291.d26b7d) >> >> -- >> -- >> spread the word ... seewww.browsehappy.com;o) >> >> Calvin: Weekends don't count unless you spend them doing something >> completely pointless. >> >> Join the Greater IBM Connection >> (http://www.xing.com/premiumgroup-6291.d26b7d) > > > -- -- spread the word ... see www.browsehappy.com ;o) Calvin: Weekends don't count unless you spend them doing something completely pointless. Join the Greater IBM Connection (http://www.xing.com/premiumgroup-6291.d26b7d) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---