为什么页码那里需要做事件代理
来源: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动态添加上的元素,给它直接绑定事件是不生效的,因此需要给它的父元素绑定事件,通过事件代理,让子元素的事件可以生效。
祝学习愉快!
相似问题
回答 2
回答 2
回答 4
回答 2
回答 2