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, которая не принимает аргументов.