我试图找出隐藏某个类的所有形式的时间。我有以下内容:
$('.fix').submit( function(event) {
...
$.ajax({
...
success: function(data) {
...
$(this).slideToggle(checkIfDoneCorrecting());
}
});
});
function checkIfDoneCorrecting() {
console.log( $('.fix:visible').length );
if( ! $('.fix:visible').length ) {
console.log('none visible');
$("#grade").slideToggle();
}
}
最初有3种可见形式。运行第一个$ .ajax后,提交的表单将被隐藏,因此有2个可见的表单。但是在控制台上打印出来3.然后在下一个打印机上,当只有一个表格可见时打印出2。由于我在隐藏元素后调用该函数,为什么它没有获得更新的可见计数?
答案 0 :(得分:1)
.slideToggle()方法可以设置匹配元素的高度。 这会导致页面的下半部分向上或向下滑动 揭露或隐藏物品。如果最初显示元素,则为 将被隐藏;如果隐藏,它将被显示。
在slideToggle()中会有动画,这意味着有延迟。但是你正在调用回调函数来尽快检查长度。
所以它给你错误的长度,因为它没有隐藏。
正确的回调将是
$(this).slideToggle(checkIfDoneCorrecting);
// without the paranthesis
答案 1 :(得分:0)
您应该在slideToggle
中执行此操作,并在动画完成后调用该函数。
$('.fix').submit( function(event) {
$(this).slideToggle( "slow", function() {
checkIfDoneCorrecting();
});
});
function checkIfDoneCorrecting() {
console.log( $('.fix:visible').length );
}