javascript - 动态生成用于 Bootstrap 分页的 li 元素,以便它们响应 onclick 事件

标签 javascript jquery twitter-bootstrap twitter-bootstrap-3 pagination

我在使用动态生成列表元素的 BootStrap 分页时遇到问题。我可以生成列表元素,但它们似乎不响应事件,例如用户单击它们时。

让我举两个例子来更好地说明我的问题:

1) 这段代码有效。在这里,我使用静态分页,其中所有列表项都已创建。正如您所看到的,当我单击分页元素时,这些元素就会被激活。

https://jsfiddle.net/2040n6a2/

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<body>

<nav id="pag_nav">
  <ul class="pagination">
  <li class=prev><a href=# aria-label=Previous><span aria-hidden=true>&laquo;</span></a></li>
      <li><a href=#>1</a></li>
      <li><a href=#>2</a></li>
      <li><a href=#>3</a></li>
      <li><a href=#>4</a></li>
      <li><a href=#>5</a></li>
      <li class=next><a href=# aria-label=Previous><span aria-hidden=true>&raquo;</span></a></li>
  </ul>
</nav>

var pageItem = $('.pagination > li').not('.prev,.next');
var prev = $('.pagination > li.prev');
var next = $('.pagination > li.next');

pageItem.click(function() {
  pageItem.removeClass('active');
    $(this).not('.prev,.next').addClass('active');
});

next.click(function() {
   $('li.active').removeClass('active').next().addClass('active');
});

prev.click(function() {
   $('li.active').removeClass('active').prev().addClass('active');
});

2) 此代码不起作用。在这里,我动态创建列表元素。在这种情况下,当我单击分页元素时,这些元素不会被激活。

https://jsfiddle.net/n75d2vct/

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<body>

<nav id="pag_nav">
  <ul class="pagination">
  </ul>
</nav>

</body>

var pageItem = $('.pagination > li').not('.prev,.next');
var prev = $('.pagination > li.prev');
var next = $('.pagination > li.next');

pageItem.click(function() {
  pageItem.removeClass('active');
    $(this).not('.prev,.next').addClass('active');
});

next.click(function() {
   $('li.active').removeClass('active').next().addClass('active');
});

prev.click(function() {
   $('li.active').removeClass('active').prev().addClass('active');
});

$('#pag_nav ul').append('<li class=prev><a href=# aria-label=Previous><span aria-hidden=true>&laquo;</span></a></li>');

for (var i = 0; i <5; i++)
{
    $('#pag_nav ul').append('<li><a href=#>' + i + '</a></li>');
}

$('#pag_nav ul').append('<li class=next><a href=# aria-label=Previous><span aria-hidden=true>&raquo;</span></a></li>');

你能告诉我我在第二个例子中做错了什么吗?我知道我可以使用 Datatables 等众所周知的插件,但我想了解为什么使用普通 BootStrap + jQuery 我的代码无法正常工作。

非常感谢。

最佳答案

看看这个 fiddle https://jsfiddle.net/v14t257h/ ,就像下面的评论说:你必须使用 event delegation

如果您想动态绘制分页,代码应如下所示

$('.pagination').on('click', 'li:not(.prev):not(.next)', function() {
    $('.pagination li').removeClass('active');
    $(this).not('.prev,.next').addClass('active');
});

$('.pagination').on('click', 'li.prev', function() {
    $('li.active').removeClass('active').prev().addClass('active');
});

$('.pagination').on('click', 'li.next', function() {
    $('li.active').removeClass('active').next().addClass('active');
});

function drawPagination(numOfPages) {
    $('#pag_nav ul').empty();
    $('#pag_nav ul').append('<li class=prev><a href=# aria-label=Previous><span aria-hidden=true>&laquo;</span></a></li>');
   for (var i = 1; i <= numOfPages; i++) {
      $('#pag_nav ul').append('<li><a href=#>' + i + '</a></li>');
   }
   $('#pag_nav ul').append('<li class=next><a href=# aria-label=Previous><span aria-hidden=true>&raquo;</span></a></li>');
}

drawPagination(5);

关于javascript - 动态生成用于 Bootstrap 分页的 li 元素,以便它们响应 onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40157660/

相关文章:

javascript - 如何从开放的 Bootstrap 模式中获取 'id'?

html - 有人可以向我解释如何进行响应式设计吗?

javascript - 将脚本写入 DOM 并在 DOM 完成渲染之前让它运行

javascript - 动态设置全局 JS 变量

javascript - 当使用 react-redux v5 设置 React v15.5 时,路由不导航

javascript - `!@#$%^&*(` 等非字母数字字符是否可以用作有效 ID?

java - 在 SPRING 中调用 ajax 响应时显示 Not Acceptable 错误

javascript - 从 codeigniter Controller 发送电子邮件后无法在 jquery 中获得响应

javascript - jquery toggleClass 只工作一次

javascript - tour.goTo(i) 不起作用