如何将变量传递给jQuery的.fadeOut()

时间:2015-06-18 23:31:58

标签: javascript jquery

我有一个想要传递给.fadeOut()的对象。

在我们开始之前,我可以将对象传递给.click():

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

足够简单。

现在我想用.fadeOut做类似的事情:

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

哪个不起作用。但你明白了吗?如何将this传递给匿名函数?

我正在寻找最干净的解决方案。除此之外,我正在寻找与.click()所做的最相符的解决方案。

谢谢!

ASIDE:是否有更简洁的方法将this传递给.click()

2 个答案:

答案 0 :(得分:5)

这是一个关于JS的问题,而不是关于jQuery的问题;你可以这样做:

var story = this

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

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

或者更奇特的东西(这也保留了story在分配时的内容,即使它在后面的上部范围被覆盖了):

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

答案 1 :(得分:2)

似乎fadeOut()没有click()之类的重载,您可以通过eventData

  

.click([eventData],handler)

因此,在闭包中保留this并在函数内部使用

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