if ($("#makespan").is(":visible") == true) { 
    var make = $("#make").val(); 
}
else {
    var make = $("#othermake").val(); 
}

Make:<span id=makespan><select id=make></select><span id=othermakebutton class=txtbutton>Other?</span></span><span id=othermakespan style="display: none;"><input type=text name=othermake id=othermake>&nbsp;-&nbsp;<span id=othermakecancel class=txtbutton>Cancel</span></span>

上面的代码在Firefox中运行流畅,但在Chrome中似乎行不通。在Chrome中,它显示.is(":visible") = false,即使它是真的。

我使用以下jQuery版本:jQuery -1.4.3.min.js

jsfiddle.net/wju2r/4/


当前回答

如果你读过jquery文档,你会发现有很多不可见/隐藏的原因:

它们的CSS显示值为none。

它们是带有type="hidden"的表单元素。

它们的宽度和高度显式地设置为0。

祖先元素是隐藏的,因此该元素不会显示在页面上。

http://api.jquery.com/visible-selector/

下面是一个带有一个可见元素和一个隐藏元素的jsfiddle小例子:

http://jsfiddle.net/tNjLb/

其他回答

jQuery的:visible选择器似乎不适用于Chrome中的一些内联元素。解决方案是添加一个显示样式,比如“block”或“inline-block”来让它工作。

另外请注意,jQuery对可见内容的定义与许多开发人员有所不同:

如果元素占用文档中的空间,则认为它们是可见的。 可见元素的宽度或高度大于零。

换句话说,一个元素必须具有非零的宽度和高度才能占用空间并可见。

能见度:hidden或不透明度:0的元素被认为是可见的, 因为它们仍然占用布局中的空间。

另一方面,即使它的可见性被设置为隐藏或不透明度为零,它仍然对jQuery可见,因为它消耗空间,当CSS显式地表示其可见性为隐藏时,这可能会令人困惑。

不在文档中的元素被认为是隐藏的;jQuery是 类时,无法知道它们是否可见 文档,因为它取决于适用的样式。 所有选项元素都被认为是隐藏的,不管它们是什么 选中状态。 在动画中隐藏元素时,会考虑该元素 直到动画结束都可见。在动画中显示 元素时,该元素被认为在开始处可见 动画。

看它最简单的方法是,如果你能在屏幕上看到元素,即使你看不到它的内容,它也是透明的,它是可见的,也就是说它占据了空间。

我稍微清理了一下你的标记,并添加了一个显示风格(即设置元素显示为“块”等),这对我来说是有效的:

小提琴

官方API参考:可见


从jQuery 3开始,:visible的定义发生了轻微的变化

jQuery 3稍微修改了的含义:可见的(因此是的) :隐藏)。 从这个版本开始,将考虑元素 :如果它们有任何布局框,包括那些零宽度的布局框,则可见 和/或高度。例如,br元素和带有no . 内容将由:visible选择器选择。

如果你读过jquery文档,你会发现有很多不可见/隐藏的原因:

它们的CSS显示值为none。

它们是带有type="hidden"的表单元素。

它们的宽度和高度显式地设置为0。

祖先元素是隐藏的,因此该元素不会显示在页面上。

http://api.jquery.com/visible-selector/

下面是一个带有一个可见元素和一个隐藏元素的jsfiddle小例子:

http://jsfiddle.net/tNjLb/

有一种奇怪的情况,如果元素被设置为显示:内联jQuery检查可见性失败。

例子:

CSS

#myspan {display: inline;}

jQuery

$('#myspan').show(); // Our element is `inline` instead of `block`
$('#myspan').is(":visible"); // This is false

要解决这个问题,你可以在jQuery中隐藏元素,然后show/hide或toggle()应该可以正常工作。

$('#myspan').hide()
$('#otherElement').on('click', function() {
    $('#myspan').toggle();
});

一般来说,当我的对象的父对象被隐藏时,我就会遇到这种情况。 例如,当HTML是这样的:

    <div class="div-parent" style="display:none">
        <div class="div-child" style="display:block">
        </div>
    </div>

如果你问child是否可见,比如:

    $(".div-child").is(":visible");

它将返回false,因为它的父元素不可见,所以div也不可见。

我需要使用可视性:hidden而不是display:none,因为可见性需要事件,而显示不需要。

因此写入。attr('visibility') === "visible"