Dom 克隆期间无法在IE中触发事件 下面的代码将克隆一组div及其事件(onclick),该代码对FF运行良好,但在IE的情况下,它不会触发与每个div关联的事件。 第一组{ 边框:1px纯红; } 函数显示工具提示(idx、条件、ev){ 警报(idx+“=”+条件+“=”+ev); } 函数createCloneNode(){ var cloneObj=document.getElementById(“firstdiv”).cloneNode(true); document.getElementById(“maindiv”).appendChild(cloneObj); } 函数init(){ var mainDiv=document.createElement(“div”); mainDiv.id='mainDiv'; var firstDiv=document.createElement(“div”); firstDiv.id='firstDiv'; firstDiv.className='firstDiv'; 对于(var j=0;j
,您的代码存在多个问题,这些问题导致它在某些浏览器中无法工作,或者在其他浏览器中部分工作:Dom 克隆期间无法在IE中触发事件 下面的代码将克隆一组div及其事件(onclick),该代码对FF运行良好,但在IE的情况下,它不会触发与每个div关联的事件。 第一组{ 边框:1px纯红; } 函数显示工具提示(idx、条件、ev){ 警报(idx+“=”+条件+“=”+ev); } 函数createCloneNode(){ var cloneObj=document.getElementById(“firstdiv”).cloneNode(true); document.getElementById(“maindiv”).appendChild(cloneObj); } 函数init(){ var mainDiv=document.createElement(“div”); mainDiv.id='mainDiv'; var firstDiv=document.createElement(“div”); firstDiv.id='firstDiv'; firstDiv.className='firstDiv'; 对于(var j=0;j,dom,javascript-events,Dom,Javascript Events,,您的代码存在多个问题,这些问题导致它在某些浏览器中无法工作,或者在其他浏览器中部分工作: onmouseover/onmouseout事件 作为属性指定的处理程序 在以下情况下不得复制: 克隆(根据DOM规范在任何浏览器中),这就是您看不到的原因 任何浏览器中的文本下划线效果 在Internet Explorer(IE9之前)中,无法通过使用setAttribute方法设置onxxx属性来分配事件处理程序 您克隆了一个具有id属性的HTML结构,并将其插入到同一文档中,这会产生重复id的问题-
因此,要使代码在每个浏览器中都能正常工作,唯一的解决方案是克隆不带ID的片段,并手动(重新)分配事件处理程序。您的代码存在多个问题,这些问题使它要么在某些浏览器中无法工作,要么在其他浏览器中部分工作:
因此,要让代码在每个浏览器中正常工作,唯一的解决方案是克隆没有ID的片段,并手动(重新)分配事件处理程序。我同意@Sergey Ilinsky的观点。您首先要了解IE和FF之间的DOM差异 试试这段代码,应该会有帮助
Following is the code which will clone a set of div with their events(onclick) which is working fine for FF but in case of IE it is not firing events associated with each div.
<html>
<head>
<style type='text/css'>
.firstdiv{
border:1px solid red;
}
</style>
<script language="JavaScript">
function show_tooltip(idx,condition,ev) {
alert(idx +"=="+condition+"=="+ev);
}
function createCloneNode () {
var cloneObj = document.getElementById("firstdiv").cloneNode(true);
document.getElementById("maindiv").appendChild(cloneObj);
}
function init(){
var mainDiv = document.createElement("div");
mainDiv.id = 'maindiv';
var firstDiv = document.createElement("div");
firstDiv.id ='firstdiv';
firstDiv.className ='firstdiv';
for(var j=0;j<4;j++) {
var summaryDiv = document.createElement("div");
summaryDiv.id = "sDiv"+j
summaryDiv.className ='summaryDiv';
summaryDiv.onmouseover = function() {this.setAttribute("style","text-decoration:underline;cursor:pointer;");}
summaryDiv.onmouseout = function() {this.setAttribute("style","text-decoration:none;");}
summaryDiv.setAttribute("onclick", "show_tooltip("+j+",'view_month',event)");
summaryDiv.innerHTML = 'Div'+j;
firstDiv.appendChild(summaryDiv);
}
mainDiv.appendChild(firstDiv);
var secondDiv = document.createElement("div");
var linkDiv = document.createElement("div");
linkDiv.innerHTML ='create clone of above element';
linkDiv.onclick = function() {
createCloneNode();
}
secondDiv.appendChild(linkDiv);
mainDiv.appendChild(secondDiv);
document.body.appendChild(mainDiv);
}
</script>
</head>
<body>
<script language="JavaScript">
init()
</script>
</body>
</html>
第一组{
边框:1px纯红;
}
var cloneCount=0;
var bname=navigator.appName;
var-isIE=false;
如果(bname==“Microsoft Internet Explorer”){
伊西=真;
}
否则{
isIE=假;
}
函数显示工具提示(idx、条件、ev){
警报(idx+“=”+条件+“=”+ev);
}
函数createCloneNode(){
var cloneObj=document.getElementById(“firstdiv”).cloneNode(false);
cloneObj.id++=cloneCount++;
createSummaryNodes(cloneObj);
document.getElementById(“maindiv”).appendChild(cloneObj);
}
函数createSummaryNodes(firstDiv){
对于(var j=0;j,我同意@Sergey Ilinsky的观点。您首先遇到了IE和FF之间的DOM差异
试试这段代码,应该会有帮助
Following is the code which will clone a set of div with their events(onclick) which is working fine for FF but in case of IE it is not firing events associated with each div.
<html>
<head>
<style type='text/css'>
.firstdiv{
border:1px solid red;
}
</style>
<script language="JavaScript">
function show_tooltip(idx,condition,ev) {
alert(idx +"=="+condition+"=="+ev);
}
function createCloneNode () {
var cloneObj = document.getElementById("firstdiv").cloneNode(true);
document.getElementById("maindiv").appendChild(cloneObj);
}
function init(){
var mainDiv = document.createElement("div");
mainDiv.id = 'maindiv';
var firstDiv = document.createElement("div");
firstDiv.id ='firstdiv';
firstDiv.className ='firstdiv';
for(var j=0;j<4;j++) {
var summaryDiv = document.createElement("div");
summaryDiv.id = "sDiv"+j
summaryDiv.className ='summaryDiv';
summaryDiv.onmouseover = function() {this.setAttribute("style","text-decoration:underline;cursor:pointer;");}
summaryDiv.onmouseout = function() {this.setAttribute("style","text-decoration:none;");}
summaryDiv.setAttribute("onclick", "show_tooltip("+j+",'view_month',event)");
summaryDiv.innerHTML = 'Div'+j;
firstDiv.appendChild(summaryDiv);
}
mainDiv.appendChild(firstDiv);
var secondDiv = document.createElement("div");
var linkDiv = document.createElement("div");
linkDiv.innerHTML ='create clone of above element';
linkDiv.onclick = function() {
createCloneNode();
}
secondDiv.appendChild(linkDiv);
mainDiv.appendChild(secondDiv);
document.body.appendChild(mainDiv);
}
</script>
</head>
<body>
<script language="JavaScript">
init()
</script>
</body>
</html>
第一组{
边框:1px纯红;
}
var cloneCount=0;
var bname=navigator.appName;
var-isIE=false;
如果(bname==“Microsoft Internet Explorer”){
伊西=真;
}
否则{
isIE=假;
}
函数显示工具提示(idx、条件、ev){
警报(idx+“=”+条件+“=”+ev);
}
函数createCloneNode(){
var cloneObj=document.getElementById(“firstdiv”).cloneNode(false);
cloneObj.id++=cloneCount++;
createSummaryNodes(cloneObj);
document.getElementById(“maindiv”).appendChild(cloneObj);
}
函数createSummaryNodes(firstDiv){
对于(var j=0;j