今天遇到一个问题,动态创建的元素,绑定事件无效,如下:

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原生的 委托事件 来进行动态绑定

 

posted on 2017-12-05 18:48  huanying2015  阅读(592)  评论(0编辑  收藏  举报