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