问题描述
如:for(vark=0;k<count;k++){varaElem=document.createElement('span');aElem.attachEvent("ondblclick",newFunction("d(aElem)"));}想给其添加一个事件并将对象传入,但这样传不过去,用function(){}传,又不是当前对象,而是最后一个,哪位同仁也遇到此情况了,是否有好的解决方法?谢谢
解决方案
解决方案二:
为什么要newFunction?直接写function(){}不行吗?
解决方案三:
不行啊,这样的话传的是最后一个对象。
解决方案四:
1.根据闭包原理,你在function(){}中可以申明一个变量来赋值,然后对该变量操作;2.从你的例子看,想在ondblclick中得到激活事件的对象,试试srcElement直接获取对象。
解决方案五:
经过测试,楼上的第一个方法不可以,还是提示都是“---2”,第二个方法可以,但有谁知道JS的闭包原理呢,传递一个变化的对象?functionas(){vartb=document.getElementById("tb");vartbdy=document.createElement('tbody');vartr,td;varaElem;for(vark=0;k<3;k++){tr=document.createElement('tr');td=document.createElement('td');aElem=document.createElement('span');//newFunction("d(aElem)")aElem.attachEvent("ondblclick",function(){var_this=aElem;d(_this);});aElem.innerHTML="---"+k;td.appendChild(aElem);tr.appendChild(td);tbdy.appendChild(tr);}tb.appendChild(tbdy);}functiond(x){alert(event.srcElement.innerHTML)alert(x.innerHTML);}
解决方案六:
<html><body><tableid=tb><tr><td>hello</td></tr></table></body><script>functionas(){vartb=document.getElementById("tb");vartbdy=document.createElement('tbody');vartr,td;varaElem;for(vark=0;k<3;k++){tr=document.createElement('tr');td=document.createElement('td');aElem=document.createElement('span');setEvent(aElem);aElem.innerHTML="---"+k;td.appendChild(aElem);tr.appendChild(td);tbdy.appendChild(tr);}tb.appendChild(tbdy);}functionsetEvent(aElem){aElem.attachEvent("ondblclick",function(){d(aElem);});}functiond(x){alert(x.innerHTML);}as();</script></html>
解决方案七:
该回复于2010-12-08 10:26:03被版主删除
解决方案八:
该回复于2010-12-10 10:28:57被版主删除
解决方案九:
该回复于2010-12-10 15:09:59被版主删除