2015-10-29 6 views
0

У меня есть аккордеон, и вы хотите что-то вызвать, когда он закончил переход из одного состояния в другое. Следующий код вырвет ошибку Uncaught TypeError, я просто пытаюсь console.log, когда он закончил сейчас:JQuery. Then not working

$(document).ready(function() { 
    $('.accordion-tabs').each(function() { 
     $(this).children('li').first().children('a').addClass('is-active').next().addClass('is-open').show(); 
    }); 
    $('.accordion-tabs').on('click', 'li > a.tab-link', function(event) { 
     if (!$(this).hasClass('is-active')) { 
      event.preventDefault(); 
      var accordionTabs = $(this).closest('.accordion-tabs'); 
      accordionTabs.find('.is-open').removeClass('is-open').hide(); 

      $(this).next().toggleClass('is-open').toggle(); 
      accordionTabs.find('.is-active').removeClass('is-active'); 
      $(this).addClass('is-active').then(
      function() { 
       console.log("Accordion Finished"); 
      });   
     } else { 
      event.preventDefault(); 
     } 
    }); 
}); 

Где я буду неправильно? Это первый раз, когда я использовал .then!

+0

, что вы думаете, то() метод используется для? https://api.jquery.com/deferred.then/ – messerbill

+0

Как сделать переход? Есть ли анимация css? Что вы пытаетесь сделать, кроме входа в консоль? – charlietfl

+0

вы можете рассказать нам, что такое библиотека аккордеона? @ mike-harrison – gon250

ответ

-1

да это не работает, это не способ его использования вам нужно научиться promises первого

Он используется для замены (или обеспечить альтернативный способ) старый механизм обратного вызова с более чистым способом для обработки асинхронных запросов , вместо того, чтобы передавать ваши обратные вызовы в качестве параметров, вы можете связать свою функцию с помощью. then, данная функция будет выполняться после разрешения обещания.

Во всяком случае, это просто базовое объяснение, вы должны действительно заглянуть в книги обещаний для получения дополнительной информации.

простой пример:

var promise = new Promise(function(resolve, reject) { 
    if (true /* everything turned out fine */) { 
    resolve("Stuff worked!"); 
    } 
    else { 
    reject(Error("It broke")); 
    } 
}); 


promise.then(function (x) { // Suppose promise returns "abc" 
    console.log(x); 
    return 123; 
}).then(function (x){ 
    console.log(x); 
}).then(function (x){ 
    console.log(x) 
}) 
+0

, здесь нет обещаний. Весь код синхронный. Просто потому, что OP использовал 'then', это не значит, что им нужно обещание. Как это решает проблему ОП? – charlietfl

+0

Да, я знаю, я просто хочу, чтобы он знал о том, что является основной причиной его проблемы, и как использовать «. Then» в будущем, и, пожалуйста, запустите код после удаления «. Then», возможно, вам помогут знать, что есть нет ошибки в его коде без блока обещаний –