背景:需要给动态生成的元素添加点击事件处理程序的时候,用传统的onclick()方法不生效;
原因:在绑定事件的时候选择器只会选择页面中已经存在的元素,所以动态生成的元素是绑定不了事件的。
那么可以通过事件委托 on() 开解决这个问题;这里还涉及了一个概念:事件冒泡。
- on():在选择元素及子元素上绑定一个或多个事件处理函数。
语法:
$(selector).on(event,childSelector,data,function,map)
参数 | 描述 |
event | 必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值。必须是有效的事件。 |
childSelector | 可选。规定只能添加到指定的子元素上的事件处理程序 |
data | 可选。规定传递到函数的额外数据。 |
function | 可选。规定当事件发生时运行的函数。 |
map | 规定事件映射 ({event:function, event:function, …}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。 |
demo1:向 p元素添加 click 事件处理程序:
$("p").on("click",function(){
alert("The paragraph was clicked.");
});
demo2:给下图中的a标签“删除”添加点击事件
$('.category-wrap').on('click','.row-product-category.now .delete',function(e){
console.log($(this).parent().parent());
$(this).parent().parent().remove();
});
补充:停止事件冒泡的方法
.stopPropagation()