隐藏和显示的问题

xunfengqi 2018-09-15 04:31:21
for (i = 0; i < 9; i++) {
yincang[i].style.visibility = 'hidden';
aImg[i].onclick = function () {
yincang[i].style.visibility = 'visible';
}
}
老师让我们做一个漫威主题,所以想做一个点击相应图片显示点击相对应的英雄,隐藏其他英雄,但是这个总是出问题,一直是点一下出现第一个,再点出现第二个,到第4个就不动了,和我预想的有很大差别。
用的js代码就是上面这一段了,因为代码有几页就不放了,主要就这些
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a-shitou 2018-09-17
  • 打赏
  • 举报
回复
结构设计不太合理吧?点击 aImg[i] 去显示 yincang[i] ,用一个i去关联两个东西是不是有点草率,
你试试aImg[i]对象上加一个属性去关联你的yincang[i] ,比如对象id,这时候只要在click里面用this.tag类似这样不就找到yincang[i] 了吗?
用i的话后期不小心调整了顺序或者新加了英雄,,,麻烦事儿
类似这样写
<div class='aImg' for='yincang123'>
<div class='yincang' id='yincang123'>
xunfengqi 2018-09-16
  • 打赏
  • 举报
回复
引用 2 楼 xunfengqi 的回复:
[quote=引用 1 楼 jslang 的回复:]
事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。
解决方法是可以用闭包把每次循环i的值保存起来。

for (i = 0; i < 9; i++) {
(function (i) {
yincang[i].style.visibility = 'hidden';
aImg[i].onclick = function () {
yincang[i].style.visibility = 'visible';
}
})(i);
}

你这个不行,我里面那个for循环是为了把所有div隐藏的,你这个代码不能实现隐藏,所以点了后面再点前面的不显示,我刚试过了,只能从前往后,不能从后往前[/quote]好像说错了,我这里没加里面的for循环,但是你这个还是不能实现,然后试着用你这个方法去弄内循环也不大行,没什么效果,for (i = 0; i < 9; i++) {
(function (i) {
for(j=0;j<9;j++){
(function (j) {
yincang[j].style.visibility = 'hidden';
})(j);
}
aImg[i].onclick = function () {
yincang[i].style.visibility = 'visible';
}
})(i);
}
xunfengqi 2018-09-16
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。
解决方法是可以用闭包把每次循环i的值保存起来。

for (i = 0; i < 9; i++) {
(function (i) {
yincang[i].style.visibility = 'hidden';
aImg[i].onclick = function () {
yincang[i].style.visibility = 'visible';
}
})(i);
}

你这个不行,我里面那个for循环是为了把所有div隐藏的,你这个代码不能实现隐藏,所以点了后面再点前面的不显示,我刚试过了,只能从前往后,不能从后往前
了 义 2018-09-16
  • 打赏
  • 举报
回复
这里为什么不用 this
for (i = 0; i < 9; i++) {
yincang[i].style.visibility = 'hidden';
aImg[i].onclick = function () {
this.style.visibility = 'visible';
}
}
天际的海浪 2018-09-16
  • 打赏
  • 举报
回复

for (i = 0; i < 9; i++) {
	(function (i) {
        aImg[i].onclick = function () {
	        for (var t = 0; t < 9; t++) {
       	        yincang[t].style.visibility = 'hidden';
	        }
            yincang[i].style.visibility = 'visible';
        }
	})(i);
}

天际的海浪 2018-09-15
  • 打赏
  • 举报
回复
事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。 解决方法是可以用闭包把每次循环i的值保存起来。
for (i = 0; i < 9; i++) {
	(function (i) {
        yincang[i].style.visibility = 'hidden';
        aImg[i].onclick = function () {
            yincang[i].style.visibility = 'visible';
        }
	})(i);
}

87,954

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧