【问题标题】:Show hidden div on click fix点击修复时显示隐藏的 div
【发布时间】:2016-10-02 04:26:14
【问题描述】:

我在不使用任何 JQuery 的情况下重建页面,我需要在不使用 display none 的情况下隐藏 div。我隐藏的 div 保存来自 jotform 的表单,并且 display none 属性破坏了我在 Firefox 上的表单。我的解决方案是使用纯 javascript 并使用可见性和最大高度切换显示。

这是我的脚本:

 function showDiv(that) {
    var len = document.getElementsByTagName('div').length;
    for (var i = 0; i < len; i++) {
        document.getElementsByTagName('div')[i].style.visibility = "hidden";
        document.getElementsByTagName('div')[i].style.maxHeight = "0px";
    }
    var val = that.value;
    document.getElementById(val).style.visibility = "visible";
    document.getElementById(val).style.maxHeight = "10px";
}

我的 CSS:

#div1, #div2, #div3 {
    visibility: hidden;
    max-height:0px;

}
.button {
    background-color: #cb3778;
    border: none;
    color: white;
    padding: 15px 32px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 22px;
    cursor: pointer;
    font-family: Arial;
}

我的简化代码:

<p><input type="button" class="button" name="Showdiv1" value="div1" onclick="showDiv(this)" />
    <input type="button" class="button" name="Showdiv2" value="div2" onclick="showDiv(this)" />
    <input type="button" class="button" name="Showdiv3" value="div3" onclick="showDiv(this)" /></p>
<div id="0">Click a button to start</div>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3" style="margin-top:1500px;">div3</div>

这是一个工作演示:https://jsfiddle.net/cgrouge/a4wehtcd/2/

如您所见,由于 div 只是隐藏的,因此您仍然可以向下滚动页面到内容可见的位置。在内容可见之前,我不想翻页滚动。有解决办法吗?

【问题讨论】:

  • 这就是 display: none 的用途,你为什么不想使用它?
  • @KWeiss 显示没有人破坏我在 Firefox 上的表单。我已经与 jotform 支持人员进行了交谈,不幸的是,他们无法帮助我处理我的原始登录页面。他们把我引到这个页面来解释这个错误:bugzilla.mozilla.org/show_bug.cgi?id=548397

标签: javascript html hidden


【解决方案1】:

你可以使用溢出:隐藏

function showDiv(that) {
  var len = document.getElementsByTagName('div').length;
  for (var i = 0; i < len; i++) {
       document.getElementsByTagName('div')[i].style.visibility = "hidden";
       document.getElementsByTagName('div')[i].style.height = "0px";
       document.getElementsByTagName('div')[i].style.overflow = "hidden";
  }
  var val =  that.value;
  document.getElementById(val).style.visibility = "visible";
  document.getElementById(val).style.height = "10px";
  document.getElementById(val).style.overflow = "visible";
}

这里是示例:jsfiddle

【讨论】:

  • 我也试过了,发现这不是解决办法。我已经编辑了你的小提琴来给你看一个例子。我的表单很长,所以在 div 3 上,我放置了一个 margin-top 样式来将内容推到页面下方(模拟长表单)。即使 div 3 被隐藏,您仍然可以将页面向下滚动到 div 3 内容可见的位置。
  • 如果你要为visibility:hidden div添加边距,空间仍然会被占用。我不明白为什么您不能在我提供的示例中的 div3 下放置一个大表单?你能发布更新的小提琴吗?
  • 好的,确实有效!我应该使用表格进行测试,而不是让 div 更高。我将在我的页面中实现这一点。谢谢!
  • 您知道如何添加滚动功能,以便在显示表单时表单顶部滚动到页面顶部吗?
  • 您可以在表单之前添加锚点并绑定 jquery 事件以滚动到该点:$(document).scrollTop( $("#header").offset().top );
猜你喜欢
  • 2011-01-15
  • 1970-01-01
  • 2014-06-12
  • 2017-10-21
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
相关资源
最近更新 更多