最近碰到一个问题,将问题简化了一下写出来,希望得到大家的指点。下面是问题:
功能实现:点击一个显示的p,该p隐藏,下一个p显示;再次点击显示的p ... 依次进行。
源代码
为方便查看,下面也给出源代码:
<p>
<p class = "myp" id = "p1">1</p>
<p class = "myp" id = "p2">2</p>
<p class = "myp" id = "p3">3</p>
<p class = "myp" id = "p4">4</p>
<p class = "myp" id = "p5">5</p>
<p class = "myp" id = "p6">6</p>
<p class = "myp" id = "p7">7</p>
</p>
css:
.myp {
display: inline-block;
width: 50px; height: 20px;
background-color: lightgreen;
}
.myp:not(:nth-child(1)) {
visibility: hidden;
}
js:
window.onload = function(){
var cur = 1;
var curp = document.getElementById("p" + cur);
var nextp = document.getElementById("p" + ++cur);
curp.onclick = function(){
curp.style.visibility = "hidden";
nextp.style.visibility = "visible";
}
}
目前的问题是只能进行第一次点击,之后就无法通过点击触发事件了。求教问题出在哪里,如何改进,或者有其他更好的方法?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
下面是我根据你的需求写的一个效果(不知道是不是这样)。
你自己的写那个问题在于只给了一个绑定了事件,所以只有点击第一个才有效果。你需要的是给所有都绑定上事件。不需要一个一个使用
id来获取,可以使用getElementsByTagName来获取一个元素集合,然后用for循环来给每一个元素绑定事件!楼主这段代码主要有两个错误:
1、只给第一个p绑定了事件
解决方案:利用事件冒泡进行
事件委托,给当前点击的p绑定事件2、没有更新curp和nextp
一开始定义了curp和nextp后,实际上后面都没有更改这两个的值
curp和nextp一直是第一个p和第二个p,所以点击事件中进行更新
望采纳。
忘了说要在父p里写一个ID为all了……
改了一下上上面的答案
以上几个答案都都是用js控制样式。(不太推荐这种做法)
其实我们只需把样式写在css文件内,用js给对应的p添加一个class即可.(个人推荐的做法)
另外并不需要给每个p都加一个id,可使用data-index代替.
方法如下:
望采纳,Thx.