js为什么会报错Uncaught TypeError: Cannot read property 'style' of undefined
functionctrlSlider(){varctrl=document.getElementById("control");varctrlli=ctrl.getEle...
function ctrlSlider(){
var ctrl = document.getElementById("control");
var ctrlli = ctrl.getElementsByTagName("li");
var mdiv = document.getElementById("content");
var mli = mdiv.getElementsByTagName("li");
for (var i=0; i<ctrlli.length; i++){
ctrlli[i].onclick = function(){
for(var j = 0; j<mli.length; j++){mli[j].style.opacity = 0;}
mli[i].style.opacity = 1;
}
}
}
html
<div id="mid">
<div id="content">
<ul>
<li id="start" ><img src="../11.26(2)/img/one.png"/ ></li>
<li class="none"><img src="../11.26(2)/img/two.png"/ ></li>
<li class="none"><img src="../11.26(2)/img/three.png"/ ></li>
<li class="none"><img src="../11.26(2)/img/four.png"/ ></li>
</ul>
</div>
<div id="control">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</div>
</div> 展开
var ctrl = document.getElementById("control");
var ctrlli = ctrl.getElementsByTagName("li");
var mdiv = document.getElementById("content");
var mli = mdiv.getElementsByTagName("li");
for (var i=0; i<ctrlli.length; i++){
ctrlli[i].onclick = function(){
for(var j = 0; j<mli.length; j++){mli[j].style.opacity = 0;}
mli[i].style.opacity = 1;
}
}
}
html
<div id="mid">
<div id="content">
<ul>
<li id="start" ><img src="../11.26(2)/img/one.png"/ ></li>
<li class="none"><img src="../11.26(2)/img/two.png"/ ></li>
<li class="none"><img src="../11.26(2)/img/three.png"/ ></li>
<li class="none"><img src="../11.26(2)/img/four.png"/ ></li>
</ul>
</div>
<div id="control">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</div>
</div> 展开
5个回答
展开全部
function ctrlSlider(){
var ctrl = document.getElementById("control");
var ctrlli = ctrl.getElementsByTagName("li");
var mdiv = document.getElementById("content");
var mli = mdiv.getElementsByTagName("li");
for (var i=0; i<ctrlli.length; i++){
!function(k){
ctrlli[k].onclick = function(){
for(var j = 0; j<mli.length; j++)mli[j].style.opacity = 0;
mli[k].style.opacity = 1;
}
}(i)
}
}
ctrlSlider()
i在事件触发的时候已经是4了,mli[i]就成了undefined,undefined当然就没有style属性。
可以使用闭包来实现。
追问
我不是规定了 i<ctrlli.length 了吗?为什么i在触发时会是4呢?
追答
i自增到3,满足for循环条件,所以继续循环,当i自增到4,for循环停止。
但是i此时已经是4了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for (var i=0; i<ctrlli.length; i++){
ctrlli[i].onclick = function(){
for(var j = 0; j<mli.length; j++){
mli[j].style.opacity = 0;
}
mli[i].style.opacity = 1;//这个执行的时候i==ctrlli.length
}
}
改为
for (var m=0; m<ctrlli.length; m++){
(function(i){
ctrlli[i].onclick = function(){
for(var j = 0; j<mli.length; j++){
mli[j].style.opacity = 0;
}
mli[i].style.opacity = 1;//这个执行的时候i==m
}
})(m)
}
追问
上面的兄弟比您快点 都正确的解答了 不好意思啊
追答
没事,随手答的..
不过这种异步回调获取for循环的问题隔一段时间就有新手问...
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没选择到元素,应该吧var mdiv = document.getElementById("content");
var mli = mdiv.getElementsByTagName("li");写到onclick方法里面。
var mli = mdiv.getElementsByTagName("li");写到onclick方法里面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询