crowhill
crowhill

Reputation: 2558

How to pass a variable to jQuery's .fadeOut()

I have an object that I want to pass to .fadeOut().

Before we get to that, here's how I can pass an object to .click():

this.$title.click({story: this}, function (event){
    var story = event.data.story;
}

Simple enough.

Now I want to do something similar with .fadeOut:

this.$title.fadeOut("fast", {story: this}, function(){
    var story = ???
});

Which doesn't work. But you get the idea? How can I pass this into the anon function?

I'm looking for the cleanest solution. Barring that, I'm looking for the solution that's most in line with what I've done with .click().

Thanks!

ASIDE: is there a cleaner way pass this into .click()?

Upvotes: 2

Views: 1041

Answers (2)

AmmarCSE
AmmarCSE

Reputation: 30597

It seems fadeOut() doesnt have an overload like click() where you can pass eventData

.click( [eventData ], handler )

Therefore, make a preserve this in a closure and use inside the function

var story = this;
this.$title.fadeOut("fast", function(){
    //story can be used here
});

Upvotes: 2

reg4in
reg4in

Reputation: 574

This is rather a question about JS than about jQuery; you can do it like that:

var story = this

this.$title.click(function () {
  /* story still available */
})

this.$title.fadeOut('fast', function () {
  /* same here */
})

Or something more fancy (this also preserves the content of story at the moment of assignment even if it gets overwritten in the upper scope later on):

this.$title.click((function (story) {
  return function () {
    /* story is available */
    /* this will be passed to $(...).click(...) */
  }
})(this))

Upvotes: 5

Related Questions