【发布时间】:2014-06-08 19:41:18
【问题描述】:
在我正在设计的网页上使用 Bootstrap 3 可折叠面板时,我遇到了一些不寻常的问题。在此页面上,右侧的一列中有一系列图像,左侧的另一列中有一系列面板。当用户单击其中一个图像时,隐藏的覆盖 div 会变得可见,并且该 div 内的 iframe 会根据图像标签上的自定义属性更新其 src 属性。面板在单击和喜欢图像时会显示链接列表,当您单击链接时,隐藏的覆盖 div 会变为可见,并且 iframe 的 src 属性会根据 a 标签上的相同自定义属性进行更新。
我遇到的问题是,当我单击图像时,一切正常,但是当我单击面板中的链接时,覆盖 div 会在几分之一秒内可见,然后立即再次消失。我已经在 bootstrap.js 折叠代码、我的 js 代码、元素上、jquery 代码中设置了断点,以查找我的 div 立即被设置回隐藏的内容和原因。我找到了解决方法,但我不明白为什么它有效,而另一种方式则无效。我的解决方法是不使用附加到 a 标签的 click 事件的匿名 jquery 函数,而是使用 onclick 属性将显式 js 函数分配给 a 标签。理想情况下,我想对页面上的所有元素使用匿名函数,因为元素的数量会发生变化,这似乎是最干净的解决方案。任何有助于理解为什么我的匿名函数不起作用的帮助将不胜感激。
代码片段:
<div class="row" id="contentBlock">
<div class="col-md-offset-2 col-md-8">
<div class="row">
<div class="col-md-4">
<div class="panel panel-default">
<div class="survey-panel-heading">
<h4>Training Library</h4>
</div>
<div class="panel-body">
<p class="czsurvey-help-block" style="margin-bottom:10px;">Click on a category to see available training items</p>
<div class="panel-group" id="library">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#library" href="#category1">
Category #1
</a>
</h4>
</div>
<div id="category1" class="panel-collapse collapse">
<div class="panel-body">
<ul>
<li><a onclick="return fireOverlay(this);" training-target="../resources/summary_2014_04_11_1397235407.pdf">Working Training 1</a></li>
<li><a href="" class="trainingselector" training-target="../resources/summary_2014_04_11_1397235407.pdf">Not Working Training 1</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel-group col-md-8">
<div class="panel panel-default">
<div class="survey-panel-heading">
<h4>Training Recommended for you</h4>
</div>
<div class="panel-body text-center">
<p class="czsurvey-help-block" style="margin-bottom:10px;">Click on a training item to view</p>
<div class="row">
<div class="col-md-3">
<img class="img-thumbnail trainingselector" src="../resources/Renders/SideViewReported.png" training-target="../resources/summary_2014_04_11_1397235407.pdf"/>
<h4>Training 1</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="trainingoverlay">
<div id="trainingcontent">
<iframe id="contentdisplay" src="" frameborder="0" style="width:90%; height:88%;" scrolling="no"></iframe>
<h4 style="color:White;">Was this training helpful?
<span style="color:White;">
<input type="radio" id="A1" name=Q1 value="yes">Yes
<input type="radio" id="A2" name=Q1 value="no">No
</span>
</h4>
<label class="btn btn-czbacknext" id="closebutton">
Close Training
</label>
</div>
</div>
Javascript:
$(document).ready(function () {
$(".trainingselector").click(function () {
$("#contentdisplay").attr("src", $(this).attr("training-target"));
$("#trainingoverlay").show();
$("#trainingcontent").show();
});
$("#closebutton").click(function () {
$("#contentdisplay").attr("src", "");
$("#trainingoverlay").hide();
$("#trainingcontent").hide();
});
});
function fireOverlay(element) {
$("#contentdisplay").attr("src", $(element).attr("training-target"));
$("#trainingoverlay").show();
$("#trainingcontent").show();
}
相关 CSS(我如何隐藏叠加层...)
#trainingoverlay {
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background-color: rgba(0,0,0,.55);
display: none;
z-index: 1;
}
#trainingcontent {
position: fixed;
width: 50%;
height:60%;
margin-left: 25%;
padding-top:2%;
top: 150px;
text-align: center;
display: none;
overflow: hidden;
z-index: 100;
background-color: rgba(0,0,0,.9);
}
【问题讨论】:
-
你能不能也显示你不工作的匿名功能?在我看来,好像您没有禁止点击链接(加载链接目标)的默认行为。
-
不工作的功能在我包含的 js 中 - 它附加到任何具有 .trainingselector 类的元素的点击事件。在我的页面中,我有这个类的 a 和 img 标签。当您单击图像时效果很好,但是当您单击面板中的一个链接时,它会显示片刻然后再次关闭。
标签: javascript jquery html css twitter-bootstrap-3