Проблема с is(":visible")
Не могу понять почему не срабатывает следующий код:
$("div.hctrl a").click(function() { if( $(this).closest("div.roll").find("div.hlist").is(':visible') ) $(this).closest("div.roll").find("div.hlist").css("visibility", "hidden"); else $(this).closest("div.roll").find("div.hlist").css("visibility", "visible"); return false; }); Если поменять условие к примеру на проверку по классу, то все будет работать. Однако хочется обойтись минимальным кодом и не городить лишние addClass removeClass. |
spo,
а как выглядит хтмл остаётся загадкой |
Привожу весь код:
hidden(); function hidden() {$("div.hlist").css("visibility", "hidden");} $("body").click(function() {hidden();}); $("div.hctrl a").click(function() { hidden(); if( $(this).closest("div.roll").find("div.hlist").is(':visible') ) $(this).closest("div.roll").find("div.hlist").css("visibility", "hidden"); else $(this).closest("div.roll").find("div.hlist").css("visibility", "visible"); return false; }); $("div.hlist a").click(function() { var new_a = $(this).attr("class"); var new_b = $(this).text(); hidden(); $(this).closest("div.roll").find("div.hctrl a").removeClass().addClass(new_a).text(new_b); $(this).closest("div.roll").find("input[type='hidden']").val(new_a); return false; }); <div class="roll"> <div class="hctrl"> <a class="v-1" href="#" title="">1</a> </div> <div class="hlist"> <div><a class="v-1" href="#" title="">1</a></div> <div><a class="v-2" href="#" title="">2</a></div> <div><a class="v-3" href="#" title="">3</a></div> <div><a class="v-4" href="#" title="">4</a></div> </div> <input type="hidden" value="v-1" /> </div> |
spo,
Элементы с css-свойством visibility равным hidden, а так же элементы с нулевой прозрачностью, считаются видимыми, поскольку они продолжают занимать место на странице. $(this).closest("div.roll").find("div.hlist").is(' :visible') всегда будет true |
Вот оно что!
Тогда возникает вопрос, как правильно построить условие? |
spo,
$(this).closest("div.roll").find("div.hlist").css('visibility')!="hidden" |
Все получилось.
Большое спасибо, рони! |
Перепиши код так:
function hideLists() { $("div.hlist").css("visibility", "hidden"); } hideLists(); $("body").click(hideLists); $("div.hctrl a").click(function() { hideLists(); var $list = $(this).closest("div.roll").find("div.hlist"); var visibility = $list.css("visibility"); $list.css("visibility", visibility == "visible" ? "hidden" : "visible"); return false; }); $("div.hlist a").click(function() { var new_a = $(this).attr("class"), new_b = $(this).text(); hideLists(); $(this).closest("div.roll").find("div.hctrl a").removeClass().addClass(new_a).text(new_b); $(this).closest("div.roll").find("input[type='hidden']").val(new_a); return false; }); Вот только почему visibility? С display был бы куда проще. |
Спасибо, danik.js за усовершенствованный код!
Да с hide и show удобнее работать, но скрипт кастомного скроллбара, который я подключаю потом внутрь списков требует именно visibility. |
Цитата:
|
Часовой пояс GMT +3, время: 04:45. |