我想检测,如果我给了一个id的HTML元素可见或不可见,而无需使用jQuery的。
上下文:
在忘记用户密码页面,我有一个表格,其中用户输入上提交自己的登录名和点击。 在此之后,如果他树立了chalenge问题,它会显示,他将能够回答这个问题,并再次提交。 (前相同的按钮)。
我的问题:
当用户点击提交,在IE中,如果他点击了好几次,他会得到一个电子邮件,他每点击它的时间。
我认为:
我想点击该按钮提交后禁用按钮,但我只能禁用它,如果两个条件是正确的:
- 如果用户已经submited他的登录名(没有错误)。
- 用户进行了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要做到这一点,我会感激。
谷歌帮我找出的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
请参阅此它的习惯很少的代码可能是有用的
<!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必需的。
正如我在想禁用按钮,我在这里写的,我错了我的这个问题的解决办法,因为这将是非常昂贵的,使其工作。 通过这种方式,研究,测试一些想法和@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>
}
我这个写了一段时间回来。 这种处理很多情况下,我的知识。 如果该元素是由它的当前状态用户看到这其实检查。
显示,能见度,透明度,溢出怪癖检查和做它递归,直到我们去钱柜文档节点。
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);
}
}
}
在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;
}