如果语句在控制台中工作,而不是在源代码中工作

If statement works in console, not in source

本文关键字:工作 源代码 语句 如果 控制台      更新时间:2023-09-26

>我在单击函数中有以下 if 语句:

$('#rent-link').on('click', function() {
  $('.house-card:not(.sold)').fadeIn('fast');
  $('.for-sale').fadeOut('fast');
  $('.rental').fadeIn('fast');
  $('.sold').fadeOut('fast');
  $('.comm').fadeOut('fast');
  if ( $('.house-card:visible').length == 0 ) {
    $('#no-results').show();
  }
  return false;
});

所有代码都包装在一个文档就绪函数中,因此这不会成为问题。我不确定为什么当为这个 if 语句设置参数以解析 true 时,它总是解析 false。当我单击 #rent-link 然后在控制台中单独运行 if 语句时,它会解析为 true。

感谢您的帮助。

编辑:

我用 settimeout 函数更新了我的代码,它奏效了。你们说得对,谢谢!

这是工作代码:

$('#rent-link').on('click', function() {
            $('.house-card:not(.sold)').fadeIn('fast');
            $('.for-sale').fadeOut('fast');
            $('.rental').fadeIn('fast');
            $('.sold').fadeOut('fast');
            $('.comm').fadeOut('fast');
            setTimeout(function() { 
                if ( $('.house-card:visible').length === 0 ) {
                    $('#no-results').show();
                } 
            }, 500); 
            return false;
        });

if 语句运行时,可能仍然有一些可见的.house-card元素。

fadeInfadeOut 函数是异步的,在最终将元素设置为 hidden 之前,使用一系列间隔来淡出不透明度。if语句很可能在函数完成之前执行,并且实际上隐藏了元素。

当您单击该按钮然后在控制台中运行语句时,在实际运行命令之前,褪色函数花费的时间可能超过半秒,因此在运行命令之前元素已经隐藏

若要确保 if 语句在动画完成后运行,可以使用回调函数,如 http://api.jquery.com/fadeout/中所述。像这样:

$('.sold').fadeOut('fast', function() {
  if ( $('.house-card:visible').length == 0 ) {
    $('#no-results').show();
  }
});

请注意,这只能确保没有.house-card.sold:visible元素。我不确定.comm.for-sale是否也在.house-card元素上,但如果是,可能需要更多的时间才能确保它们都不可见。