-2

现在我正在将车把模板附加到 div。我想在代码上使用它-

test = $(".someClass:onScreen")

我知道 onScreen 有效,因为我在将鼠标悬停在该类上时已经记录了同一行,并且它会在屏幕上返回内容。现在,这种情况正在发生,因为我在要附加到的 div 中的内容上有一个 slideUp() 。我知道这一点,因为当我执行 slideDown() 时,该行会正确返回内容。

我该如何解决这个问题?slideUp 完成后我可以收听一些事件吗?

编辑-

我也尝试使用 Jquery slideUps 回调,但仍然无济于事 -

    @$el.find("#container").slideDown('fast',@appendSearchResults(resultsCollection))
    @$el.find("#container").empty()

  appendSearchResults:(resultsCollection)=>
    @$el.find("#searchContainerId").append(Handlebars.templates["resultsPage"](
      row: resultsCollection.toJSON()
      nResults: resultsCollection.length
      ))
    @genImageToolTip()
    console.log("testing ons creen")
    test = $(".carImageClass:onScreen")
    console.log(test)
4

1 回答 1

0

jQuery.slideUp()有一个完成函数的参数,该函数将在动画完成时调用。jQuery doc中的详细信息相当清楚。

传递回调时,它采用简单的函数引用,而不是函数调用。如果您在此处放置一个函数调用(在其后加上括号以使其执行),则该函数将立即执行,而不是稍后执行。您的代码看起来不像普通的 javascript,所以我不能确切地建议它应该如何工作。一个正常的 javascript 回调应该是这样的:

$("#whatever").slideUp(2000, function() {
   // do whatever you want to do upon completion
});

或像这样:

$("#whatever").slideUp(2000, slideDone);

function slideDone() {
    // do whatever you want to do upon completion of the slideUp event
}

此外,jQuery 没有:onScreen内置的选择器。如果您已安装并按照文档说明使用它,则有一个插件可以提供该选择器。


至于您的具体代码,我不知道 CoffeeScript,但我会尝试用纯 javascript 向您展示一些相关示例。

你可以这样做:

$el.find("#container").slideDown('fast', function() { 
    appendSearchResults(resultsCollection)
});

function appendSearchResults(resultsCollection) {
    // code here
}

你不能做这个:

$el.find("#container").slideDown('fast', appendSearchResults(resultsCollection));

function appendSearchResults(resultsCollection) {
    // code here
}

这不起作用,因为这会立即调用 appendSearchResults,然后将该函数的返回结果传递给不是函数的 slideUp。您需要将不带任何参数的函数引用传递给 slideUp。

于 2012-09-06T05:52:49.643 回答