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检查可见性失败。

例子:

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();
});

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

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

如果一个项是隐藏项的子项,is(":visible")将返回true,这是不正确的。

我只是通过添加“display:inherit”到子项来修复这个问题。这将为我解决这个问题:

<div class="parent">
   <div class="child">
   </div>
<div>

和CSS:

.parent{
   display: hidden;
}
.child{
   display: inherit;
}

现在可以通过改变父元素的可见性来有效地打开和关闭项目,$(element).is(":visible")将返回父元素的可见性

ie浏览器,Chrome浏览器,火狐浏览器……

跨浏览器函数isVisible()

//check if exist and is visible
function isVisible(id) {
    var element = $('#' + id);
    if (element.length > 0 && element.css('visibility') !== 'hidden' && element.css('display') !== 'none') {
        return true;
    } else {
        return false;
    }
}

完整的例子:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
        <script type="text/javascript">
            //check if exist and is visible
            function isVisible(id) {
                var element = $('#' + id);
                if (element.length > 0 && element.css('visibility') !== 'hidden' && element.css('display') !== 'none') {
                    return true;
                } else {
                    return false;
                }
            }

            function check(id) {
                if (isVisible(id)) {
                    alert('visible: true');
                } else {
                    alert('visible: false');
                }
                return false;
            }
        </script>

        <style type="text/css">
            #fullname{
                display: none;
            }
            #vote{
                visibility: hidden;
            }
        </style>
        <title>Full example: isVisible function</title>
    </head>
    <body>
        <div id="hello-world">
            Hello World!
        </div>
        <div id="fullname">
            Fernando Mosquera Catarecha
        </div>
        <div id="vote">
            rate it!
        </div>
        <a href="#" onclick="check('hello-world');">Check isVisible('hello-world')</a><br /><br />
        <a href="#" onclick="check('fullname');">Check isVisible('fullname')</a><br /><br />
        <a href="#" onclick="check('vote');">Check isVisible('vote')</a>
    </body>
</html>

问候,

Fernando

一个跨浏览器/版本的解决方案来确定一个元素是否可见,是添加/删除一个css类的元素显示/隐藏。元素的默认(可见)状态可以是这样的:

<span id=“span1” class=“visible”>span text</span>

然后在hide上删除类:

$ (" # span1”).removeClass(“可见”)hide ();

在节目中,再次添加:

$ (" # span1”).addClass(“可见的”),告诉();

然后,使用下面的命令来确定元素是否可见:

如果($ (" # span1 ") .hasClass(“可见”)){/ /做某事}

这也解决了在大量使用":visible"选择器时可能出现的性能影响,jQuery文档中指出了这一点:

大量使用此选择器可能会影响性能,因为它可能迫使浏览器在确定可见性之前重新呈现页面。通过其他方法跟踪元素的可见性,例如使用类,可以提供更好的性能。

jQuery官方API文档:visible选择器