<script>
window.onload=function ()
{
var aBtn=document.getElementsByTagName('input');
var oDiv=document.getElementsByClassName('div1');
var i;
for(i=0;i<aBtn.length;i++)
{
aBtn[i].index = i;
//下面要注意
aBtn[i].onclick=(function(_i){
return function (){
oDiv[_i].style.display='block';
}
})(i);
};
};
</script>
javascript
怎么让div的兄弟节点隐藏呢?像tab标签一样
在线等
解决闭包的问题
防止oDiv[_i]中的_i为i最后的值+1
我只是想让他的兄弟节点隐藏,在oDiv[_i].style.display='block';后加XXX.style.display='none'
能写下代码吗?
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
.div1 {width:400px; height:300px; background:#CCC; border:1px solid #999;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>无标题文档</title><script>
window.onload=function ()
{
var aBtn=document.getElementsByTagName('input');
var oDiv=document.getElementsByClassName('div1');
var i;
for(i=0;i<aBtn.length;i++)
{
aBtn[i].index = i;
//下面要注意
aBtn[i].onclick=(function(_i){
return function (){
oDiv[_i].style.display='block';
}
})(i);
};
};
</script>
</head><body>
<input type="button" value="按钮1" />
<input type="button" value="按钮2" />
<input type="button" value="按钮3" />
<div class="div1">11111
</div>
<div class="div1" style="display:none;">22222
</div>
<div class="div1" style="display:none;">33333
</div>
</body>
</html>这是源代码
window.onload=function (){
var aBtn=document.getElementsByTagName('input');
var oDiv=document.getElementsByClassName('div1');
for(var i=0;i<aBtn.length;i++){
aBtn[i].index = i;
//下面要注意
aBtn[i].onclick=(function(_i){
return function (){
//调用hideAll
hideAll();
oDiv[_i].style.display='block';
}
})(i);
};
};
//隐藏所有
function hideAll(){
var oDiv=document.getElementsByClassName('div1');
for(var i = 0 ; i < oDiv.length ; ++i){
oDiv[i].style.display='none';
}
}
我还想问下
aBtn[i].onclick=(function(_i){
return function (){
oDiv[_i].style.display='block';
}
})(i);
为什么不能写成这样啊
aBtn[i].onclick=function(){
oDiv[_i].style.display='block';
}
{
var aBtn=document.getElementsByTagName('input');
var oDiv=document.getElementsByClassName('div1');
var i;
for(i=0;i<aBtn.length;i++)
{
aBtn[i].index = i;
//下面要注意
aBtn[i].onclick=(function(_i){
return function (){
for(var j=0; j<oDiv.length;++j){
oDiv[j].style.display='none';
}
oDiv[_i].style.display='block';
}
})(i);
};
};
aBtn[i].onclick=function(){
oDiv[i].style.display='block';
}写成这样?
{
var aBtn=document.getElementsByTagName('input');
var oDiv=document.getElementsByClassName('div1');
var i;
for(i=0;i<aBtn.length;i++)
{
aBtn[i].index = i;
//下面要注意
aBtn[i].onclick=(function(_i){
return function (){
oDiv[activeButton].style.display='none';
oDiv[_i].style.display='block';
activeButton = _i;
}
})(i);
};
};
</script> 貌似这个更好?
如果你写成:aBtn[i].onclick=function(){
oDiv[i].style.display='block';
}
你会发现,不管点击哪个都只有最后一个显示,换句话就是上面的代码都会变成:
aBtn[i].onclick=function(){
oDiv[aBtn.length-1].style.display='block';
}
i不会起作用了。
其实完全可以这么搞,代码简单自己看看吧:window.onload = function () {
var aBtn = document.getElementsByTagName('input');
var oDiv = document.getElementsByClassName('div1');
var i;
for (i = 0; i < aBtn.length; i++) {
aBtn[i].index = i; aBtn[i].onclick = (function () {
for(var j = 0; j < oDiv.length; j++){
oDiv[j].style.display = 'none';
}
oDiv[this.index].style.display = 'block';
});
}
};