Unless you really want "this" to reference a string object within your handler, you won't want to pass strings into bindAsEventListener as far as I can see.
The first parameter to bindAsEventListener is the object that you want to access via "this" within the handler (http://www.prototypejs.org/ api/function/bind, http://www.prototypejs.org/api/function/bindAsEventListener). When the handler is called in response to an event, the first argument to it will be the event object for the event. These are two separate things. So for example, if I have a method called "handleIt" on an object instance assigned to a variable called "myThingy" and an element with the ID "someDiv", this code: $('somediv').observe('click', myThingy.handleIt.bindAsEventListener(myThingy)); ...means that when "someDiv" is clicked, the "handleIt" method will be called with "this" referencing "myThingy" and with the first parameter being the event object generated by the click. You only care what "this" is if you're going to use it within the handler; if you're just interested in the event or the element on which the event occurred, you don't need "this" at all, just use the first argument (the event) and the element that generated it [Event.element(eventObject)]. Hope this helps, -- T.J. Crowder tj / crowder software / com On Mar 7, 2:08 pm, Walter Lee Davis <[EMAIL PROTECTED]> wrote: > I tried using the keyword this in the bindAsEventListener and inside > the details function, and that did not work. What appeared to be > bound was the anchor, not the event. And I was right back where I > started with not being able to stop the click event before the link > was followed. > > Should this: > > $$('a.more').invoke("observe","click",blah.bindAsEventListener(this)); > > Have been this: > > $$('a.more').invoke("observe","click",blah.bindAsEventListener('this')); > > Because I can see that the former is passing an object while the > latter is passing a string. > > Walter > > On Mar 7, 2008, at 6:26 AM, T.J. Crowder wrote: > > > > > Walter, > > > Am I missing something about bindAsEventListener when you pass it a > > string for the thisObj parameter? Because it looks to me like you're > > binding your 'details' function such that when the function is called > > in response to the event, the 'this' keyword will refer to the string > > "evt". It doesn't matter in your example because your 'details' > > function never uses 'this' (instead it gets the element that was > > clicked using Event.element, which is reasonable), but I thought I'd > > ask the question... > > -- > > T.J. Crowder > > tj / crowder software / com > > > On Mar 6, 5:20 pm, Walter Lee Davis <[EMAIL PROTECTED]> wrote: > >> Just to wrap this up, here's what worked: > > >> var details = function(evt){ > >> Event.stop(evt); > >> var elm = Event.element(evt); > >> alert(elm); > >> } > >> $$('a.more').invoke > >> ('observe','click',details.bindAsEventListener > >> ('evt')); > > >> Thanks again for setting me on the right track. > > >> Walter > > >> On Mar 6, 2008, at 11:59 AM, Elden wrote: > > >>> try this. > > >>> $$('a.more').invoke("observe","click",blah.bindAsEventListener > >>> (this)); > > >>> function blah(event){ > >>> //this function would do way more than this > >>> event.stop(); > >>> alert ("blah"); > >>> } > > >>> and for more information take a look on the api doc's > > >>>http://www.prototypejs.org/api/function/bind > > >>>http://www.prototypejs.org/api/function/bindAsEventListener > > >>> On Thu, Mar 6, 2008 at 10:41 AM, Walter Lee Davis > >>> <[EMAIL PROTECTED]> wrote: > > >>> I have a set of A tags that I would like to watch unobtrusively. I > >>> have given them all the same classname, and I want to use invoke to > >>> set them up, rather than each. Am I trying to do something that > >>> won't > >>> work? > > >>> var blah = function(){ > >>> //this function would do way more than this > >>> alert (this); > >>> } > > >>> $$('a.more').invoke('observe','click',blah); > > >>> This works fine, but I want to stop the event, and none of these do > >>> the trick: > > >>> this.stop() > >>> Event.stop(this) > > >>> or even extending the invoke with an additional argument after blah > >>> and using that as the event. > > >>> $$('a.more').invoke('observe','click',blah,'evt'); > > >>> The only way I have been able to hack it to actually do what I want > >>> is to set this.href to null. Which feels wrong in many ways. > > >>> What's the right way to do this -- unobtrusively setting these links > >>> to not work, yet leaving them alone for those who don't have JS > >>> enabled? Can I do this with invoke or do I need to get out and push > >>> with each? > > >>> Thanks in advance, > > >>> Walter > > >>> -- > >>> {a human being that was given to fly} --~--~---------~--~----~------------~-------~--~----~ 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 [email protected] 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 -~----------~----~----~----~------~----~------~--~---
