I'm not positive this is the problem but try putting a var in front of the nextTarget assignment. Right now it looks like a global variable in the code fragment you posted.
var nextTarget = targetItem.next(); David On Nov 13, 8:18 am, serializer <[EMAIL PROTECTED]> wrote: > Hi, > > I've set up a simple extension for an image rotator. It looks like > this: > > jQuery.fn.imageRotate = function(delay,speed) { > // Converted s into ms > delay = delay * 1000; > // Get all child items of the list > var targetItems = $(this).children(); > // Hide all except first item (and store the first item as > targetItem) > var targetItem = targetItems.hide().slice(0,1).show(); > // Set a JS timeout for next rotation > setTimeout(function(){ > $(this).imageRotateNext(targetItem,delay,speed); > },delay); > }; > > jQuery.fn.imageRotateNext = function(targetItem,delay,speed) { > nextTarget = targetItem.next(); > if (!nextTarget.is("li")) { > // Get first child of the list by slicing first > element of > collection > nextTarget = $(this).children().slice(0,1); > // Move it to the end of the list > $(this).append(nextTarget); > } > nextTarget.fadeIn(speed,function(){ > // Previous item will be hidden on fade completion > targetItem.hide(); > }); > setTimeout(function(){$ > (this).imageRotateNext(nextTarget,delay,speed)},delay); > > }; > > The HTML markup is a plain unordered list, with each list item > containing one image. If you call $ > ("ul#myList1").imageRotate(2,"fast") the extension hides all except > the first image, then starts fading each one in over the top after the > specified number of seconds (delay). > > It works beautifully when just one image is rotating. Once I get more > than one on the page at once, however, images start intermittently > disappearing. > > It seems like it's being caused by the *other* list; meaning, when an > image from the *second* list fades in, the current image in the > *first* list gets hidden. > > I conclude that the targetItem.hide() which gets called on completion > of fadeIn is causing the problem. It should be hiding the image in the > second list, but by the time the callback is performed, targetItem is > now referring to the targetItem from the *first* list, so that gets > hidden instead. > > I hope this is clear so far ! > > So really, I think I understand the problem, I'd just like to know > other people's recommendations for how to solve this type of problem, > namely Javascript variable scope within callback functions. How do I > set up a callback that will have a reference to the object this > variable holds *now*, rather than the reference it points to *when* > the callback is raised? I've come up against this issue a few times, > so I think understanding this solution might help me in quite a few > places. > > Thank you kindly, > Pete Hurst