我正在尝试运行两组不同的函数,具体取决于单击另一个元素时某个元素是否可见。这是整个函数:
$('#grid').click(function() {
if('#photo_grid:hidden') {
$('#grid').addClass('active').removeClass('fadein');
$('.cycle-slideshow').fadeTo('fast',0.3);
$('#photo_grid').fadeIn('slow');
} else {
$('#grid').addClass('fadein').removeClass('active');
$('#photo_grid').fadeOut('fast');
$('.cycle-slideshow').fadeTo('slow',1.0);
}
});
这会导致从 #grid
和 .cycle-slideshow
中添加/删除的类根据需要在第一次点击时淡化到 30%。但是,#photo_grid
不会淡入,因此后续点击会失败。任何人都可以提出为什么会这样吗?
页面已上线 here ,#grid
按钮位于最右下方。
最佳答案
if
的问题在于您正在有效地测试字符串的存在,而您尝试做的是响应字符串的可见性一个元素。因此我建议:
if ($('#photo_grid:hidden').length)
或者:
if ($('#photo_grid').is(':hidden'))
.length
检查确保选择器返回一个或多个元素(因为 jQuery 总是 返回一个数组(即使它是一个 空 数组),而 is()
方法返回一个 bool 值,以反射(reflect)传递给该方法的选择器匹配或不匹配的元素。
引用资料:
-
is()
.
关于jquery - 基于元素可见性的功能不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13534366/