Jquery时间问题

时间:2012-09-06 05:47:50

标签: javascript jquery load-order

现在我将一个把手模板附加到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)

1 个答案:

答案 0 :(得分:0)

jQuery .slideUp()有一个完成函数的参数,它将在动画结束时被调用。详情请参见the jQuery doc

传递回调时,它需要一个简单的函数引用,而不是函数调用。如果你在那里放一个函数调用(在它之后使用parens使它执行),那么该函数会立即执行,而不是稍后执行。您的代码看起来不像普通的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。