使用jQuery动态添加Prev Next作为Bootstrap Modal按钮

时间:2018-03-20 08:23:24

标签: jquery twitter-bootstrap button modal-dialog dynamically-generated

我似乎遇到了使用jQuery动态添加按钮并且缺少这些按钮的问题。我已经确认这些按钮之前已添加到DOM中。

我有codepen,其中包含4个按钮。每个按钮打开一个模态,如下图所示

enter image description here

我使用jQuery为每个模态添加Prev和Next按钮,除了第一个模态只添加一个Next按钮,最后一个模态只添加一个Prev按钮。我正在使用jQuery来执行此任务。这是代码:

$(function() {

  var $modals = $('[data-toggle="modal"]');
  var mCount = $modals.length;
  var el = $('.modal-footer').children();

  var prevButton = $("<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>");
 var nextButton = $('<button type="button" class="btn btn-default" data-dismiss="modal">Next</button>');


  for (var i = 0; i < mCount; i++) {
    if ( i === 0 ) {
      $(el[i]).after(nextButton);
    } else if ( i === mCount -1 ) {
      $(el[i]).before(prevButton);
    } else {
      $(el[i]).before(prevButton);
      $(el[i]).after(nextButton); 
    }
  }
});

我已经使用Chrome Dev Tools运行跟踪,在每个循环结束时设置断点,我看到按钮已创建。但是,在下一次迭代中,添加的按钮正在从DOM中消失。希望有人可以解释我做错了什么。

jQuery完成1循环后我的HTML中的第一个模态页脚。从chrome dev工具粘贴,这表明添加了Next按钮:(目前为止好)

<div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <button type="button" class="btn btn-default" data-dismiss="modal">Next</button>
</div>

第二次循环后。第一个模态页脚不再有“下一步”按钮,但第二个模态页脚添加了“上一个”和“下一个”按钮。 (第一个模态的按钮是如何被删除的?)

<div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Prev</button>
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <button type="button" class="btn btn-default" data-dismiss="modal">Next</button>
</div>

第3次循环之后。第二个模态页脚不再有Prev和Next按钮。第3个模态页脚添加了Prev和Next按钮。

第4次循环后,第3个模态页脚的Prev按钮被删除(为什么?),第4个模态页脚是正确的。没有丢失按钮。

2 个答案:

答案 0 :(得分:1)

更改

var prevButton = $("<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>");

var prevButton = "<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>";

(即删除$()包装器)

当您使用$("..")时,您创建了一个新节点,.after / .before 该节点移动到新位置。

当您使用纯文本时,它每次都会为您创建一个新节点,因此无法移动它。

答案 1 :(得分:1)

我已更新您的codepen。请点击此处。

https://codepen.io/smitraval27/pen/Ldxrey

// javascript object patterns
$(function() {

  var $modals = $('[data-toggle="modal"]');
  var mCount = $modals.length;
  var el = $('.modal-footer').children();

  var prevButton = "<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>";
 var nextButton = '<button type="button" class="btn btn-default" data-dismiss="modal">Next</button>';

  for (var i = 0; i < mCount; i++) {
    if ( i === 0 ) {
      $(el[i]).after(nextButton);
    } else if ( i === mCount -1 ) {
      $(el[i]).before(prevButton);
    } else {
      $(el[i]).before(prevButton);
      $(el[i]).after(nextButton); 
    }
  }
});