我有一个手风琴,并且想要在完成从一个状态转换到另一个状态时触发某些东西。以下代码引发了错误Uncaught TypeError
,我现在只是尝试console.log
:
$(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 :(得分:-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)
})