jQuery可见选择器返回错误的长度

时间:2014-05-21 16:47:03

标签: javascript jquery

我试图找出隐藏某个类的所有形式的时间。我有以下内容:

$('.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。由于我在隐藏元素后调用该函数,为什么它没有获得更新的可见计数?

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 );
}

这是jsfiddle demo