Jquery Timing Issue

Прямо сейчас я добавляю шаблон руля к div. Я хочу использовать это в коде -

test = $(".someClass:onScreen")

Я знаю, что onScreen работает, потому что я записал ту же строку при наведении курсора на этот класс, и он возвращает данные на экране. Теперь, это происходит потому, что у меня есть функция slideUp() для материала в div, к которому я добавляю. Я знаю это, потому что, когда я делаю slideDown(), строка возвращает вещи правильно.

Как мне обойти это? Есть ли какое-то событие, которое я могу прослушать, когда слайд-шоу закончится?

РЕДАКТИРОВАТЬ-

Я попытался использовать обратный вызов 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 ответ

JQuery .slideUp() имеет аргумент для функции завершения, которая будет вызываться после завершения анимации. Детали довольно ясны здесь, в документе jQuery.

При передаче обратного вызова требуется простая ссылка на функцию, а не вызов функции. Если вы поместите туда вызов функции (с паренями после него, которые заставят ее исполниться), то эта функция будет выполнена немедленно, а не позже. Ваш код не похож на обычный 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, которая не принимает аргументов.

Другие вопросы по тегам