2011-12-23 2 views
42

Я пытаюсь написать скрипт, который будет скрывать/показывать div в зависимости от видимости других элементов. Действие должно выполняться, когда я нажимаю на другой элемент. Вот что я написал до сих пор:jQuery if statement to check visibility

$('#column-left form').hide(); 
    $('.show-search').click(function() { 
     $('#column-left form').stop(true, true).slideToggle(300); 
     if($('#column-left form').css('display') == 'none') { 
      $("#offers").show(); 
     } else { 
      $('#offers').hide(); 
     } 
    }); 

Он скрывает div, но он не возвращается, когда я скрываю форму. Буду благодарен за любую помощь :)

редактировать:

Хорошо, я сумел для того чтобы достигнуть желаемого эффекта, написав это:

$('#column-left form').hide(); 
    $('.show-search').click(function() { 
     if ($('#column-left form').is(":hidden")) { 
      $('#column-left form').slideToggle(300); 
      $('#offers').hide(); 
     } else { 
      $('#column-left form').slideToggle(300); 
      $("#offers").show(); 
     } 
    }); 

Я не знаю, если это написано правильно, но он работает;) Спасибо всем за помощь!

ответ

115

Вы можете использовать .is(':visible'), чтобы проверить, если что-то видно и .is(':hidden'), чтобы проверить на противоположное:

$('#offers').toggle(!$('#column-left form').is(':visible')); // or: 
$('#offers').toggle($('#column-left form').is(':hidden')); 

Ссылка:

+1

Это возвращает 'истина', если элемент виден или' false', если это не так. Стоит отметить.;) – Purag

+5

«проверить, если» подразумевает, что он возвращает логическое значение;) – ThiefMaster

+0

@Purmou:! $ ('# Column-left form'). Is (': visible'), безусловно, вернет логическое значение, однако это утверждение заключен внутри переключателя, следовательно, он должен достичь желаемого выхода. –

2

попробовать

if ($('#column-left form:visible').length > 0) { ... 
+0

Не будет работать, даже пустой объект jQuery оценивает значение 'true' в булевом контексте (' !! [] === true'). Вы можете добавить '.length', хотя для его работы., – ThiefMaster

+0

@ThiefMaster: Я отредактировал ответ kontur, так что теперь это правильно! – NickGreen

+1

Ty, downvote удален. Я бы опустил '> 0', хотя, поскольку длина никогда не будет отрицательной. – ThiefMaster

1
$('#column-left form').hide(); 
$('.show-search').click(function() { 
    $('#column-left form').stop(true, true).slideToggle(300); //this will slide but not hide that's why 
    $('#column-left form').hide(); 
    if(!($('#column-left form').is(":visible"))) { 
     $("#offers").show(); 
    } else { 
     $('#offers').hide(); 
    } 
    }); 
4

Да, вы можете использовать .is(':visible') в JQuery. Но пока код работает под браузером сафари .is(':visible') не работает.

Поэтому, пожалуйста, используйте код ниже

if($(".example").offset().top > 0) 

выше линия будет работать как IE, а также сафари также.

0

После исправления проблемы производительности, связанные с использованием .а («Видимый»), я бы рекомендовал против вышеуказанных ответов и вместо того, чтобы использовать код JQuery для принятия решения, виден ли один элемент:

$.expr.filters.visible($("#singleElementID")[0]); 

Что. Is делает, проверяет, находится ли набор элементов в пределах другого набора элементов. Таким образом, вы будете искать свой элемент во всем наборе видимых элементов на своей странице. Наличие 100 элементов довольно нормально и может потребоваться несколько миллисекунд для поиска по массиву видимых элементов. Если вы создаете веб-приложение, у вас, вероятно, сотни или, возможно, тысячи. Наше приложение иногда принимало 100 мс для $ ("# selector"). Is (": visible"), так как он проверял, был ли элемент в массиве из 5000 других элементов.

0

если видно.

$("#Element").is(':visible'); 

если он скрыт.

$("#Element").is(':hidden');