2010-04-29 30 views
0

克隆一个节点我想创建下面的代码使用JavaScript DOM克隆使用Javascript DOM

var summaryDiv = __createElement("div","sDiv","sDiv"+j); 
     summaryDiv.onmouseover = function() {this.setAttribute("style","text-decoration:underline;cursor:pointer;");} 
     summaryDiv.onmouseout = function() {this.setAttribute("style","text-decoration:none;");} 
     if(browser.isIE) { 
      summaryDiv.onclick = new Function("__fc.show_tooltip("+j+",'view_month')"); 
    } else { 
      summaryDiv.setAttribute("onclick", "__fc.show_tooltip("+j+",'view_month',event)"); 
     } 
    someobj.appendChild(summaryDiv); 

我米使用OBJ = summaryDiv.cloneNode(真),这是创建节点。但是onclick事件不会在Internet Explorer中引发火灾。任何机构都可以帮助我解决这个问题?

+0

而不是做setAttribute('onclick'),为什么不只是分配一个函数的onclick属性? – Tejs 2010-04-29 18:50:04

+0

即时创建多个div使用循环和使用setAttribute即时通讯分配一些值,即时通讯到show_tooltip函数 – Abhimanyu 2010-04-29 18:55:46

回答

2
this.setAttribute("style","text-decoration:underline 

不要使用的setAttribute,它不会在IE 8 <的工作很多情况下(包括本)和HTML/CSS-DOM属性是更具可读性:this.style.textDecoration= 'underline';。 (这些天你可能会想用CSS :hover规则而不是JS悬停高亮显示,只有IE6中的任意位置悬停不起作用;最后剩余的IE6用户通常可以在没有最眩光的情况下长时间工作它仍然有效。他们可能是用来现在看到破损的网站...)

if(browser.isIE) { 
     summaryDiv.onclick = new Function("__fc.show_tooltip("+j+",'view_month')"); 
    } else { 
     summaryDiv.setAttribute("onclick", "__fc.show_tooltip("+j+",'view_month',event)"); 
    } 

无需讨厌旧的浏览器嗅探(避免!)作为第一个这些将在所有的浏览器。然而,从一个字符串创建一个函数真的很难看。您可以使用文字的函数:

summaryDiv.onclick= function() { 
    __fc.show_tooltip(j, 'view_month'); 
}; 

但是,如果你在一个循环中这样做,你可能会受到Closure Loop Problem(超过j?)。让您可以与另一封,但ECMAScript的第五版的Function#bind是清洁:

summaryDiv.onclick= __fc.show_tooltip.bind(__fc, j, 'view_month'); 

Adding bind to browsers that don't yet support it.

但onclick事件[在克隆]在Internet Explorer的情况下是没有得到火。

是的,事件处理程序在克隆时不会被复制是正常的。 (实际上,它通常是IE误克隆通过的attachEvent这就是问题所在添加监听器,所以这是周围的其他方式。)

如果您想保留事件克隆后的处理,你必须手工进行:

newClone.onclick= oldNode.onclick; 
+0

嗨bobince,我已经尝试分配的事件(onclick)到新的克隆,但仍为IE浏览器它不工作,我的意思是我可以看穿网页开发人员工具在IE8事件(onclick)被设置为它的元素,但它不会触发..一个更多的细节我想分享的是,在我的程序中克隆以及旧对象都存在于文档和内部元素有相同编号...请帮我我只是混淆它 – Abhimanyu 2010-05-01 15:19:57

+0

请发表新的代码! (例如pastebin.com等)如果您有重复的ID,您肯定会难以通过ID检索元素。 – bobince 2010-05-02 20:53:35