为什么页码那里需要做事件代理

来源:6-5 按医院查找-分页实现

_1973

2019-02-27 23:21:26

var page_wrap = $('.page_wrap');
page_wrap.empty();
for (var i = 0; i < pageCount; i++) {
   var a = '<a href="#1" class="item item_page">' + (i + 1) + '</a>';
   page_wrap.append(a);
}

老师,你好,上面这个代码是将它原有的页码数清空,再根据计算所得的新码数加载上去,这里虽说有个empty()清空子元素的操作,但是紧接着马上就通过遍历追加到这个page_wrap里面了。

按理说,后面可以用以下的代码进行就可以绑定页码的点击事件了

// 页码
$('item_page',pagination).on('click',function () {
   currentPage=$(this).index();
   $('.datalist').triggerHandler('render');
   return false;
});

但是实际上是不行的,还是需要传给父元素进行事件代理。这里我就不太能理解?

所以下面我就新建了个文件夹,自己做了个测试

代码如下:

<div class="page_wrap">
      <a href="#1" class="item item_page">1</a>
      <a href="#1" class="item item_page">2</a>
      <a href="#1" class="item item_page">3</a>
  </div>

<script src="jquery-1.12.4.js" type="text/javascript"></script>
<script>
   var page_wrap = $('.page_wrap');
   page_wrap.empty();
   for (var i = 0; i < 3; i++) {
       var a = '<a href="#1" class="item item_page">' + (i + 1) + '</a>';
       page_wrap.append(a);
   }
   $('.item_page').on('click',function () {
       $(this).css('color','white');
   });
</script>

代码很简单,也是同样先empty()清空,再追加上去的操作,然后直接使用'.item_page'绑定点击事件,让它的颜色变成白色,结果没问题,绑定成功,真的变白了。

这样就让我更加费解了,请问这个页码案例跟我新建的这个示例有哪些区别吗? 请老师为我解答。


写回答

1回答

Steve007

2019-02-28

同学,你好。需要传给父元素才能执行的原因是因为通过js动态添加上的元素,给它直接绑定事件是不生效的,因此需要给它的父元素绑定事件,通过事件代理,让子元素的事件可以生效。

祝学习愉快!

0

0 学习 · 36712 问题

查看课程