今天遇到一个问题,动态创建的元素,绑定事件无效,如下:
js 代码如下:
1 var OaddX = $('.detright div.duibi div.duibox ul li span'); // 所有的X; 2 var Ojiaru = $('.detright div.duibi div.duibox div.tiao li button'); // 添加新车对比按钮 3 OaddX.on('click',function(){ 4 var OspanX = $('.detright div.duibi div.duibox ul li span'); 5 if(OspanX.length<2){ 6 Oduicon.css('display','none'); 7 }; 8 $(this).parent().remove(); 9 }); 10 Ojiaru.on('click',function(){ 11 var OaddX1 = $('.detright div.duibi div.duibox ul li span'); 12 if(OaddX1.length>3){return false;} 13 var Oul1 = $('.detright div.duibi div.duibox ul'); 14 var Ojianei = $('.detright div.duibi div.duibox div.tiao li.titles'); 15 var str = "<span class='dui_guan'>X</span>"; 16 str += "<a href='javascript:;'>" + $.trim( Ojianei.html() ) + "</a>"; 17 var li1 = $('<li></li>'); 18 li1.append(str); 19 Oul1.append(li1); 20 });
运行结果:
要是用效果,就把 OaddX 的点击事件重新写,改成如下:
1 var OaddX = $('.detright div.duibi div.duibox ul li span'); // 所有的X; 2 var Ojiaru = $('.detright div.duibi div.duibox div.tiao li button'); // 添加新车对比按钮 3 $("body").on('click','.detright div.duibi div.duibox ul li span',function(){ 4 var OspanX = $('.detright div.duibi div.duibox ul li span'); 5 if(OspanX.length<2){ 6 Oduicon.css('display','none'); 7 }; 8 $(this).parent().remove(); 9 }); 10 Ojiaru.on('click',function(){ 11 var OaddX1 = $('.detright div.duibi div.duibox ul li span'); 12 if(OaddX1.length>3){return false;} 13 var Oul1 = $('.detright div.duibi div.duibox ul'); 14 var Ojianei = $('.detright div.duibi div.duibox div.tiao li.titles'); 15 var str = "<span class='dui_guan'>X</span>"; 16 str += "<a href='javascript:;'>" + $.trim( Ojianei.html() ) + "</a>"; 17 var li1 = $('<li></li>'); 18 li1.append(str); 19 Oul1.append(li1); 20 });
代码 差异如下:
运行结果:
在 jquery中,如果需要进行动态添加元素,并且添加的元素要具有动态绑定事件的效果,那么可以把元素的绑定事件交给父元素或者body元素来实现
规则如下:
1. $('body').on('click','未来要添加的元素',function(){ ..... }) ;
2. '父元素'.on('click','未来要添加的元素',function(){ ..... }) ;
在jquery中,个人感觉比较方便,不用再去自己写js原生的 委托事件 来进行动态绑定