检测一个元素是否可见(不使用jquery)(Detect if an element is visi

2019-08-05 06:33发布

我想检测,如果我给了一个id的HTML元素可见或不可见,而无需使用jQuery的。

上下文:

在忘记用户密码页面,我有一个表格,其中用户输入上提交自己的登录名和点击。 在此之后,如果他树立了chalenge问题,它会显示,他将能够回答这个问题,并再次提交。 (前相同的按钮)。

我的问题:

当用户点击提交,在IE中,如果他点击了好几次,他会得到一个电子邮件,他每点击它的时间。

我认为:

我想点击该按钮提交后禁用按钮,但我只能禁用它,如果两个条件是正确的:

  1. 如果用户已经submited他的登录名(没有错误)。
  2. 用户进行了chalenge问题登记,他正确地回答了这个问题。

我不能改变这样做的过程中,所以我想到的答案,检查领域添加ID,如果它是可见的。 如果是和用户点击提交按钮,我想申请属性停用的标签按钮。 我不知道是如何做到这一点,而无需使用jQuery的。

使用jQuery我可以做这样的事情:

if($('#secretAns').is(':visible')) {
    //i think it could be the solution 
    $('#general_Submit.Label').attr( disabled, disabled );

}

适用于:

<div id="secretAns" class="loginTxtFieldWrapper">
    <font color='red'>*</font><input type="text" name="secretAns" />
    <input type="hidden" name="isAnswerPage" value="1"/>
</div>
<p id="loginSubmitLink">
    <input id="general_Submit.Label" type="submit" value="general_Submit.Label" />" />
</p>

我觉得很难寻找纯JavaScript的解决方案,因为每个人都倾向于使用jQuery的,我不能在我的应用程序中使用它,因此,如果有人能帮助我与纯JavaScript要做到这一点,我会感激。

Answer 1:

谷歌帮我找出的jQuery它是如何,你可以这样做:

jQuery中1.3.2一个元件是可见的,如果它的浏览器报告的offsetWidth的offsetHeight大于0。

发行说明

搜索源代码给了我这个:

// The way jQuery detect hidden elements, and the isVisible just adds "!".
elem.offsetWidth === 0 && elem.offsetHeight === 0


Answer 2:

请参阅此它的习惯很少的代码可能是有用的

<!DOCTYPE html>
<html>
<body>
<div id="one" style="visibility: hidden;">The content of the body element is displayed in your browser.
</div>

<div id="two" style="visibility: visible;"> I'm Cool
</div>

<div onclick="push();"> Click me </div>
<script>
function push() {
a = document.getElementById("one").style.visibility;
alert("one "+a);

b = document.getElementById("two").style.visibility;
alert("one "+b);
}
</script>
</body>
</html>

上面的代码使用给出了div的能见度状态它的ID当U必需的。



Answer 3:

正如我在想禁用按钮,我在这里写的,我错了我的这个问题的解决办法,因为这将是非常昂贵的,使其工作。 通过这种方式,研究,测试一些想法和@gdoron阅读的理念和@AmeyaRote带来后,我想通了,一个简单的解决方案是隐藏点击它(页面刷新后,“提交”按钮,验证检查和按钮再次可用此过程后)。 所以,这里是解决问题,以避免点击不止一次提交按钮,对于我不能禁用它这种特殊情况下(如果我点击后停用,形式没有被submited)的用户的解决方案:

该HTML

我刚添加的onclick属性叫我创建隐藏按钮的JavaScript函数:

<p id="loginSubmitLink">
    <input id="general_Submit.Label" type="submit" onclick ="avoidDoubleSubmit();" value="general_Submit.Label" />" />
</p>

JavaScript的

function avoidDoubleSubmit() {
    <c:if test="${not empty secretQues}">
        event_addEvent(window,'load',function(){document.ResetPasswordForm.secretAns.focus();});
        document.getElementById('general_Submit.Label').style.display ='none';
    </c:if>
}


Answer 4:

我这个写了一段时间回来。 这种处理很多情况下,我的知识。 如果该元素是由它的当前状态用户看到这其实检查。

显示,能见度,透明度,溢出怪癖检查和做它递归,直到我们去钱柜文档节点。

function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === 'none') {
                return false;
            } else if ($style.visibility === 'hidden') {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === 'block' || $style.display === 'inline-block') &&
                $style.height === '0px' && $style.overflow === 'hidden') {
                return false;
            } else {
                return $style.position === 'fixed' || isVisible(el.parentNode);
            }
        }
    }


Answer 5:

在general_Submit.Label按钮点击调用一个函数Callfun(),然后禁用按钮

<input id="general_Submit.Label" onclick="Callfun()" type="submit" value="<ezmi18n:message key="general_Submit.Label" />" />

    function Callfun()
    {
     document.getElementById("general_Submit.Label").disabled = true;
    }


文章来源: Detect if an element is visible (without using jquery)