it does help.and i'll immediatly google up "michael geary" :) on a side note, i'm thinking about migrating to New Zealand. I read on your blog you spent 2 years there. How was it like? Did you enjoy it? Pros and cons ? feel free to use my email alexandre(AT)lab-au.com...
thank you again ! On Feb 15, 2008 10:53 PM, Mike Alsup <[EMAIL PROTECTED]> wrote: > Hi Alex, > > Sorry for the short response earlier. Functions have 'apply' and 'call' > methods which you can use to control the value of 'this' when the function > executes. So in my example, I invoke onIni by calling its apply method, and > I pass it 'this' which at the time is a DOM element, so when onIni executes > 'this' is that same DOM element. > > Now you actually had several problems in that plugin code you posted: > > > $.fn.myplugin= function(options,callback){ > return this.each(function(index){ > $this = $(this); > uniq = 'iAmNumber_' + index; > $this.options.onIni(); > }); > } > > For starters, that code creates global variables named $this and uniq > because you forgot the var keyword. Remember to always use var to scope > your variables. Next, you're trying to access the 'options' property of the > $this object. $this is a jQuery object and it doesn't have an options > property so I would expect a script error on that line. The options object > is in scope because it is passed into the plugin function so you just access > it directly. But if you invoke onIni like this: > > options.onIni() > > then when onIni executes 'this' will be the options object, which is not > what you want. To set 'this' we use apply: > > options.onIni.apply(this) > > You can set up 'this' to be whatever you want, but what your onIni function > expects to find there is a DOM element so that's what you should pass to > apply. > > Hope this helps. There are lots of online resources that can explain it > much better than I can. I'm no Michael Geary! > > Mike > > > > > > > > On Fri, Feb 15, 2008 at 4:26 PM, Alexandre Plennevaux > <[EMAIL PROTECTED]> wrote: > > > > Well, it's now tested, and it works!! > > > > I'm very sorry for this probably stupid question, i'm learning > > javascript from scratches. Could you explain or point me to the theory > > behind this? > > > > thank you so much > > > > alex > > > > > > > > On Feb 15, 10:14 pm, "Mike Alsup" <[EMAIL PROTECTED]> wrote: > > > Alexandre, > > > > > > This is untested, but I think it's closer to what you're looking for: > > > > > > $.fn.myplugin= function(options,callback) { > > > return this.each(function(index) { > > > this.uniq = 'iAmNumber_' + index; > > > options.onIni.apply(this); > > > }); > > > > > > } > > > > > > On Fri, Feb 15, 2008 at 4:00 PM, Alexandre Plennevaux > <[EMAIL PROTECTED]> > > > > > > > > > wrote: > > > > > > > > > > > > > hey mates, > > > > > > > I didn't find an answer to my week-old question so i'll rephrase to > > > > simplify and focus on just the little bit of knowledge i need from you > > > > guys: > > > > > > > say i want to create a function that performs some jquery methods on > an > > > > element. > > > > > > > function doThis(){ > > > > $(this).text('i've been changed'); > > > > alert("my uniq="+this.uniq); > > > > } > > > > > > > now, inside a plugin, i want to use that function as an option value > > > > > > > $('div.toBeSelected').myplugin({onIni:doThis}); > > > > > > > here is my pseudo plugin: > > > > > > > $.fn.myplugin= function(options,callback){ > > > > return this.each(function(index){ > > > > $this = $(this); > > > > uniq = 'iAmNumber_' + index; > > > > $this.options.onIni(); > > > > }); > > > > } > > > > > > > So far, the function is called, but the alert returns "my uniq = > > > > undefined" and the text() command is not performed. Why, oh why ? > > > > > > > -- > > > > Alexandre Plennevaux > > > > LAb[au] > > > > > > >http://www.lab-au.com > > > > -- Alexandre Plennevaux LAb[au] http://www.lab-au.com