关于javascript中的clearInterval停止不了的问题!!!急~
我崩溃了,为什么clearInterval之后,timer仍然在继续!!!????
关键在这一行。
我已经输出了,而且AdSwitch.thetimer_也是null,但是为什么autochange 仍然在继续???
达人求解!!!!!搞了半天了搞不订了!!!!!!
madmanahong@hotmail.com
/* 图片自动切换 */
autochange : function() {
AdSwitch.traceinfo( "!change timer " + AdSwitch.thetimer_ + "times = " + (++test));
if (!AdSwitch.thetimer_) {
return;
}
/// 为什么这个一直在继续?????AdSwitch.thetimer_已经是null了阿!!!!!!!!!!!!!!!!
}
==========================================
源代码:
<div id= "testid " style= "border:#000 1px solid;width:600px;height:200px;background-color:orange ">
</div>
<div id= "trace " style= "width:800;height:30; "> </div>
<script language= "javascript ">
var test = 0;
var AdSwitch = {
version_ : "1.0.0.0 ",
author_ : "madmanahong ",
copyright_ : "www.bj-lover.com ",
isload_ : false,
xmlpath_ : null,
xmlparser_ : null,
allad_ : Array(),
curidx_ : 0,
divid_ : null,
btncx_ : 25,
btncy_ : 25,
btnsep_ : 5,
imgdivid_ : "adswitch_img ",
timeinterval_ : 3000,
thetimer_ : null,
/* 加载广告的div */
load_xml : function(xmlpath) {
xmlpath_ = xmlpath;
if (window.ActiveXObject) {
this.xmlparser_ = new ActiveXObject( "Msxml2.DOMDocument ");
} else if (document.implementation&&document.implementation.createDocument) {
this.xmlparser_ = document.implementation.createDocument( " ", " ",null);
} else {
this.xmlparser_ = null;
return false;
}
this.xmlparser_.resolveExternals = false;
this.xmlparser_.async = false;
this.xmlparser_.load(xmlpath);
if (this.xmlparser_.parseError&&this.xmlparser_.parseError.errorCode) {
alert(this.xmlparser_.parseError.reason);
return false;
}
var elements = this.xmlparser_.getElementsByTagName( "aditem ");
if (elements) {
for (var i=0;i <elements.length;++i) {
var ele = elements[i];
this.allad_[i] = new Array();
for (var j=0;j <ele.childNodes.length;++j) {
var child = ele.childNodes[j];
/* 将所有的子元素节点都添加到列表内 1==ELEMENT_NODE */
if (child.nodeType==1) {
var text = child.firstChild;
this.allad_[i][child.nodeName] = text.nodeValue;
}
}
}
} else {
return false;
}
return true;
},
/* 得到广告的数组值 */
get_advalue : function(index, attrname) {
if (index> =0&&index <this.allad_.length) {
return this.allad_[i][attrname];
}
return null;
},
/* 设置广告数组值 */
set_advalue : function(index, attrname, attrvalue) {
var returnvalue = (this.allad_[index][attrname]==null) ? false : true;
this.allad_[index][attrname] = attrvalue;
return returnvalue;
},
/* 宿主到一个div上面 */
hostdiv : function(divid) {
this.divid_ = divid;
var divelement = document.getElementById(this.divid_);
if (!divelement)
return false;
if (!this.creatediv(divelement))
return false;
if (!this.bindtimer())
return false;
return true;
},
creatediv : function(divelement) {
/* 创建链接 */
var hrefdiv = document.createElement( "a ");
hrefdiv.setAttribute( "href ", this.allad_[this.curidx_][ "href "]);
if (this.allad_[this.curidx_][ "alt "])
hrefdiv.setAttribute( "alt ", this.allad_[this.curidx_][ "alt "]);
hrefdiv.style.display = "block ";
/*hrefdiv.style.width = getStyle(divelement, "width ");
hrefdiv.style.height = getStyle(divelement, "height ");*/
hrefdiv.style.width = divelement.style.width;
hrefdiv.style.height = divelement.style.height;
var imgdiv = document.createElement( "img ");
imgdiv.setAttribute( "id ", this.imgdivid_);
imgdiv.setAttribute( "src ", this.allad_[this.curidx_][ "src "]);
imgdiv.setAttribute( "border ", "0 ");
hrefdiv.appendChild(imgdiv);
var btnbar = document.createElement( "div ");
btnbar.style.width = divelement.style.width;
btnbar.style.height = "30px ";
var lefttext = document.createElement( "div ");
lefttext.style.lineHeight = "30px ";
lefttext.style.width = "120px ";
lefttext.style.styleFloat = "left ";
lefttext.style.cssFloat = "left ";
lefttext.style.marginLeft = "30px ";
if (this.allad_[this.curidx_][ "intro "]) {
var txt = document.createTextNode(
this.allad_[this.curidx_][ "intro "]);
lefttext.appendChild(txt);
}
var rightbtn = document.createElement( "div ");
rightbtn.style.styleFloat = "right ";
rightbtn.style.cssFloat = "right ";
/* 创建指定数目的小按钮 */
var btns = Array();
for (var i=0;i <this.allad_.length;++i) {
btns[i] = document.createElement( "a ");
btns[i].style.display = "block ";
btns[i].style.styleFloat = "left ";
btns[i].style.cssFloat = "left ";
btns[i].style.marginTop = (30-this.btncy_);
btns[i].style.width = this.btncx_;
btns[i].style.heght = this.btncy_;
btns[i].style.marginLeft = this.btnsep_;
btns[i].style.textAlign = "center ";
btns[i].style.backgroundColor = "#ffc ";
btns[i].setAttribute( "href ", "javascript:AdSwitch.changediv( " + i + "); ");
var txt = document.createTextNode(i);
btns[i].appendChild(txt);
rightbtn.appendChild(btns[i]);
}
/* 最后一个按钮的右边要剩余一点空间 */
btns[this.allad_.length-1].style.marginRight = "20px ";
/* 添加清除行 */
var cleardiv = document.createElement( "div ");
cleardiv.style.clear = "both ";
rightbtn.appendChild(cleardiv);
btnbar.appendChild(lefttext);
btnbar.appendChild(rightbtn);
divelement.appendChild(hrefdiv);
divelement.appendChild(btnbar);
return true;
},
/* 切换广告框 */
changediv : function(idx) {
if (this.curidx_==idx)
return;
var imgdiv = document.getElementById(this.imgdivid_);
if (imgdiv&&(idx> =0&&idx <this.allad_.length)) {
imgdiv.setAttribute( "src ", this.allad_[idx][ "src "]);
this.curidx_ = idx;
}
},
/* 图片自动切换 */
autochange : function() {
AdSwitch.traceinfo( "!change timer " + AdSwitch.thetimer_ + "times = " + (++test));
if (!AdSwitch.thetimer_) {
return;
}
var nextid = this.curidx_;
if (nextid==this.allad_.length-1) {
nextid = 0;
} else {
++nextid;
}
this.changediv(nextid);
},
/* 绑定计时器 */
bindtimer : function() {
var objdiv = document.getElementById(this.imgdivid_);
if (objdiv) {
/* 鼠标移动上去之后不再增加自动切换 */
objdiv.onmouseover = AdSwitch.cleartimer;
/* 鼠标移走之后要恢复timer */
objdiv.onmouseout = AdSwitch.createtimer;
/* 创建第一个timer */
this.createtimer();
return true;
}
return false;
},
/* 清除当前timer */
cleartimer : function() {
if (AdSwitch.thetimer_) {
AdSwitch.traceinfo( "!clear timer " + AdSwitch.thetimer_);
window.clearInterval(AdSwitch.theTimer_);
AdSwitch.thetimer_ = null;
}
},
/* 创建新的timer */
createtimer : function() {
if (!AdSwitch.thetimer_) {
AdSwitch.thetimer_ = window.setInterval( "AdSwitch.autochange() ", AdSwitch.timeinterval_);
AdSwitch.traceinfo( "!set timer " + AdSwitch.thetimer_);
}
},
/* test */
testfunction : function() {
var ar = new Array();
for (var i=0;i <5;++i) {
ar[i] = new Array();
for (var j=0;j <3;++j) {
ar[i][ "test "+j ] = "test " + j;
}
}
alert( ar[2][ "test2 "] );
},
debuginfo : function(element) {
alert( "node type = " + element.nodeType + '\n ' +
"node name = " + element.nodeName + '\n ' +
"node value = " + element.nodeValue);
},
traceinfo : function(info) {
var out = document.getElementById( "trace ");
out.innerHTML = info;
}
};
window.onload = function() {
/*AdSwitch.testfunction();*/
AdSwitch.load_xml( "test.xml ");
AdSwitch.hostdiv( "testid ");
}
</script>
[解决办法]
window.clearInterval(AdSwitch.theTimer_);
AdSwitch.thetimer_ = window.setInterval( "AdSwitch.autochange() ", AdSwitch.timeinterval_);
这就是问题所在?拼错大小写?
如果就是这个原因,楼主应该面壁了~~~我只花了2分钟就找到错误了~~~