【问题标题】:Reset bootstrap modal重置引导模式
【发布时间】:2012-12-29 16:56:45
【问题描述】:

所以,我正在使用引导程序的模态。

我想制作一个向导风格的模态,并提出了以下解决方案:

div sn-ps:

<div class="modal-instance hide fade" id="step1">
 <div id="stepa">
  ...
 </div>
</div>


<div id="stepb" style="display: none;">
 ...
</div>

在 step-a 中按下按钮后 step-b 被加载。

javascript sn-p:

$("#stepa").replaceWith($('#stepb'));
document.getElementById('stepb').style.display = 'block';

这没问题。

但是当我关闭模式时。 div stepa 仍然被 stepb 取代。我的解决方案是在模态隐藏时构建一个替换回 stepa:

$("#myModal").on("hidden", function() { 
//replace the child
});

我试过了:

$('#step1').children().remove();
$('#step1').append($('#stepa'));

$("#step1").children("div:first").replaceWith($('#stepa'));

但我很难选择 step-a 作为替换 div,可能是因为它不是一个单独的 div。我的问题是,这是向导样式模式的正确方法还是我应该采取其他方法?

【问题讨论】:

  • $('#step1').children().remove();你需要添加'.remove'
  • @IvoJonkers 它已经在移除孩子,只是没有添加 step-a back。

标签: javascript jquery html twitter-bootstrap


【解决方案1】:

隐藏前面和后面的步骤比复制它们要简单得多。

<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>

<div id="myModal" class="modal hide fade" data-step="1">
 <div class="step step1">
  <h1>Step 1</h1>
  <button class="btn next">Next</button>
 </div>
 <div class="step step2">
  <h1>Step 2</h1>
  <button class="btn previous">Previous</button>
  <button class="btn next">Next</button>
 </div>
 <div class="step step3">
  <h1>Step 3</h1>
  <button class="btn previous">Previous</button>
  <button class="btn done" data-dismiss="modal">Done</button>
 </div>
</div>

<style type="text/css">
  #myModal > .step { display: none; }​
</style>

<script type="text/javascript">
 $(function() {
  showStep(parseInt($('#myModal').data('step')) || 1);

  $('#myModal .next').on('click', function () {
   showStep(parseInt($('#myModal').data('step')) + 1);
  });

  $('#myModal .previous').on('click', function () {
   showStep(parseInt($('#myModal').data('step')) - 1);
  });

  $('#myModal').on('hidden', function() {
   showStep(1);
  });

  function showStep(step) {
   $('#myModal').data('step', step);
   $('#myModal > .step').hide();
   $('#myModal > .step' + step).show();
  }
 });​
</script>

http://jsfiddle.net/7kg7z/5/

【讨论】:

  • 非常感谢,似乎更符合逻辑的方法。我可以使用它。
  • 很奇怪,我无法让 step3 显示。只有当我手动编辑 step3 样式时才显示:block;它会显示。我只是通过第 3 步扩展了 css 和 div,但我还缺少其他东西吗?
  • 无法编辑我自己的评论:有趣,我编辑了你的 jsfiddle,效果很好……奇怪的东西。
  • 考虑一下。使用 JS 显示和隐藏可能更容易,因为在 CSS 中添加步骤是一个(小)痛苦。 jsfiddle.net/7kg7z/4
  • 谢谢你,我已经成功地将你的代码实现到我的项目中了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多