2016-01-29 2 views
3

я следующее, если оператор в функции мыши:Если оператор работает в консоли, а не в источнике

$('#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.

Спасибо за помощь.

Edit:

Я обновил свой код с функцией 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; 
     }); 
+2

Вы можете повторить проблему в [скрипке] (https://jsfiddle.net)? – Yass

+0

Может быть, 'fadeOut ('fast')' не достаточно быстро, т. Е. Вы проверяете, прежде чем все '.house-карты 'стали невидимыми. – Teemu

ответ

3

Создается впечатление, что, вероятно, до сих пор некоторые видимые .house-card элементы, когда if заявление бежит.

Функции fadeIn и fadeOut являются асинхронными, используя серию интервалов, чтобы погасить непрозрачность, прежде чем окончательно установить элементы на hidden. Вполне вероятно, что оператор if выполняет перед завершением функции и фактически скрывает элементы.

Когда вы нажмете кнопку, запустите оператор в консоли, вы, вероятно, зайдете дольше половины секунд, когда функции fade выполняются до фактического запуска команды, поэтому элементы были бы уже скрыты перед запуском команды ,

Чтобы убедиться, что инструкция 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 элементах, но если они есть, это, вероятно, займет немного больше, чем это, чтобы быть уверенным, что ни один из них тоже не отображается.

+0

Спасибо! @jonhopkins, я слишком долго смотрел на это, и это даже не перешло мне в голову! – Jhauge

+0

@Jhauge, я отредактировал ответ, чтобы объяснить возможный способ заставить оператор if работать так, как вы ожидаете, но вы, кажется, избили меня с помощью кода 'setTimeout' :) – jonhopkins

Смежные вопросы