84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我在ajax动态创建了三个p盒子之后,再给盒子绑定点击事件为什么不起作用?只有在ajax创建的时候 同时给他 绑定事件才有用?这样就绑定了三遍,这是为什么呢?有没有更优的办法?
比如你可以看看jquery实现
$("#a").click(callback);
$(document).on('click','#a',function(){ //TODO });
$("#a").live();//过时
$(document).on('click','#a',function(){ //TODO }); 借一楼回答的 感觉可以 先找到他父元素再绑定
这个我以前碰过,动态加载的DOM用onclick是不起作用的,因为只对存在的dom起作用,用$(document).on('click','#a',function(){})才行,你可以试试看。
你可以用事件委托来实现,就比如说
<p class="wrapper"> </p>
你想在wrapper里面添加一个列表(.list),委托你可以这样写(简单写法):
//获取目标节点(这里只支持class获取) //ele: 起始元素,最内侧的元素 //selector: className, //stopTrget: 委托容器元素 function getTargetNode(ele,selector,stopTarget){ var clsReg = new RegExp(selector), className = ele.className; if(ele === stopTarget) return null; if(clsReg.test(className)){ return ele; } else { return getTargetNode(ele.parentNode,selector); } }; //委托 function addEvent(event,ele,selector){ ele["on"+event] = function(e){ e = e || event; var target = e.target || e.srcElement; //当满足触发条件时 if(getTargetNode(target,selector,ele)){ //The deep♂dark♂fantasy } }; } addEvent("click",document.querySelecor('.wrapper'),'.list');
用JQ的on方法和delegate方法都可以,原生的话用事件委托
比如你可以看看jquery实现
$(document).on('click','#a',function(){ //TODO }); 借一楼回答的 感觉可以 先找到他父元素再绑定
这个我以前碰过,动态加载的DOM用onclick是不起作用的,因为只对存在的dom起作用,用$(document).on('click','#a',function(){})才行,你可以试试看。
你可以用事件委托来实现,就比如说
你想在wrapper里面添加一个列表(.list),委托你可以这样写(简单写法):
用JQ的on方法和delegate方法都可以,原生的话用事件委托