I will reformate the code myself but thx. And a really big thx for helping me it´s working. You saved my day ... really.
thx :) On 17 Dez., 22:21, Michael Geary <m...@mg.to> wrote: > p.s. If there are extra blank lines in my code samples, those aren't > intentional (especially not that one in the middle of the chain). Gmail is > adding those for some reason! > > On Thu, Dec 17, 2009 at 1:19 PM, Michael Geary <m...@mg.to> wrote: > > I'm sorry, I should have spotted the major bug in the code that I posted. > > > In fact, it's particularly embarrassing, because I wrote a recipe for the > > jQuery Cookbook [1] on this exact topic. It's recipe 5.2, "What's Wrong with > > $(this)?" > > > Inside the setTimeout callback function, "this" does not have the same > > value that it has outside the function. > > > To fix it, copy your "this" value into another variable before calling > > setTimeout: > > > var element = this; > > setTimeout( function() { > > $(['li.',o.hoverClass].join(''),element) > > .add(element) > > > .not(not) > > .removeClass(o.hoverClass) > > .find('>ul') > > .css('visibility','hidden'); > > }, 1000 ); > > > Because 'element' is an ordinary JavaScript variable, it is available to > > the inner nested function (the setTimeout callback). > > > BTW, here's a suggestion for another way to code the jQuery chain. It's six > > of one, half a dozen of the other, but to my eyes this is a tiny bit easier > > to follow: > > > var element = this; > > setTimeout( function() { > > $(element) > > .find( 'li.' + o.hoverClass ) > > .andSelf() > > > .not(not) > > .removeClass(o.hoverClass) > > .find('>ul') > > .css('visibility','hidden'); > > }, 1000 ); > > > -Mike > > > [1]:http://www.amazon.com/dp/0596159773/ > > > On Thu, Dec 17, 2009 at 1:02 PM, decola <decola...@googlemail.com> wrote: > > >> thx for the quick answer, but this way i´ve tried it too. I have > >> copied your code and test it too but it just don´t work. > > >> The function is called an a alert for example makes it output but the > >> important code is not running like this. > > >> On 17 Dez., 18:21, Michael Geary <m...@mg.to> wrote: > >> > You are calling the lengthy jQuery chain *first* and then passing its > >> result > >> > to setTimeout. Your code is equivalent to: > > >> > var temp = > >> > $(['li.',o.hoverClass].join(''),this) > >> > .add(this) > >> > .not(not) > >> > .removeClass(o.hoverClass) > >> > .find('>ul') > >> > .css('visibility','hidden'); > > >> > setTimeout( temp, 1000 ); > > >> > Instead, you need to pass a *function* to setTimeout: > > >> > setTimeout( function() { > >> > $(['li.',o.hoverClass].join(''),this) > >> > .add(this) > >> > .not(not) > >> > .removeClass(o.hoverClass) > >> > .find('>ul') > >> > .css('visibility','hidden'); > > >> > }, 1000 ); > > >> > -Mike > > >> > On Thu, Dec 17, 2009 at 6:47 AM, decola <decola...@googlemail.com> > >> wrote: > >> > > setTimeout($(['li.',o.hoverClass].join(''),this).add(this).not > >> > > (not).removeClass(o.hoverClass).find('>ul').css > >> > > ('visibility','hidden'), 1000);