鱼C论坛

 找回密码
 立即注册
查看: 2684|回复: 4

[已解决]为了后面div【i】.style.z-index=1;出错

[复制链接]
发表于 2022-3-30 23:36:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=5791339&ptid=211189][color=#999999]ba21 发表于 2022-3-30 22:30[/color][/url][/size]
  2. this 就是 当前点击li
  3. 我是不知道你想干嘛,功能实现了,你还纠结不能用的东西。[/quote]

  4. [code]<!DOCTYPE html>
  5. <html>
  6.         <head>
  7.                 <meta charset="utf-8">
  8.                 <title>top栏切换</title>
  9.                 <style>
  10.                 #main{
  11.                         position:relative;
  12.                         width:600px;
  13.                         height:500px;
  14.                         background-color:gray;
  15.                         margin:0 auto;
  16.                 }
  17.                 ul{
  18.                         display:flex;
  19.                         height:50px;
  20.                         background-color:green;
  21.                 }
  22.                 ul li{
  23.                         list-style:none;
  24.                         margin-left:40px;
  25.                         background-color:red;
  26.                         text-align:center;
  27.                         line-height:40px;
  28.                         cursor:pointer;
  29.                 }
  30.                 ul li:hover{
  31.                         background-color:yellow;
  32.                         color:gray;
  33.                 }
  34.                 .one{
  35.                         position:absolute;
  36.                         top:50px;
  37.                         left:0;
  38.                         width:600px;
  39.                         height:500px;
  40.                         background-color:brown;
  41.                 }
  42.                 .two{
  43.                         position:absolute;
  44.                         top:50px;
  45.                         left:0;
  46.                         width:600px;
  47.                         height:500px;
  48.                         background-color:#FFC0CB;
  49.                 }
  50.                 .three{
  51.                         position:absolute;
  52.                         top:50px;
  53.                         left:0;
  54.                         width:600px;
  55.                         height:500px;
  56.                         background-color:deeppink;
  57.                 }
  58.                 .four{
  59.                         position:absolute;
  60.                         top:50px;
  61.                         left:0;
  62.                         width:600px;
  63.                         height:500px;
  64.                         background-color:#808080;
  65.                 }
  66.                 p{
  67.                         width:300px;
  68.                         height:300px;
  69.                         margin-top:100px;
  70.                         margin-left:200px;
  71.                         text-align:center;
  72.                         line-height:300px;
  73.                         background-color:gray;
  74.                 }
  75.                 </style>
  76.         </head>
  77.         <body>
  78.         <div id="main">
  79.                 <ul>
  80.                         <li>商品生源地</li>
  81.                         <li>商品价格</li>
  82.                         <li>商品类型</li>
  83.                         <li>商品功能</li>
  84.                 </ul>
  85.                 <div class="one"><p>来自法国</p></div>
  86.                 <div class="two"><p>1999元</p></div>
  87.                 <div class="three"><p>手机类</p></div>
  88.                 <div class="four"><p>打电话</p></div>
  89.         </div>
  90.         <script>
  91.         var div=document.getElementById('main').getElementsByTagName('div');
  92.     var li=document.getElementsByTagName('ul').getElementsByTagName('li');
  93.             for( var i=0;i<div.length;i++){
  94.                                         li[i].onclick=function(){
  95.                                                         div[i].style.z-index=1;//为何这里出错;
  96.                                                 }
  97.                                         }
  98.         </script>
  99.         </body>
  100. </html>
复制代码

[/code]
最佳答案
2022-3-31 00:01:27
前面的贴请结贴。
  1. <!DOCTYPE html>
  2. <html>
  3.         <head>
  4.                 <meta charset="utf-8">
  5.                 <title>top栏切换</title>
  6.                 <style>
  7.                 #main{
  8.                         position:relative;
  9.                         width:600px;
  10.                         height:500px;
  11.                         background-color:gray;
  12.                         margin:0 auto;
  13.                 }
  14.                 ul{
  15.                         display:flex;
  16.                         height:50px;
  17.                         background-color:green;
  18.                 }
  19.                 ul li{
  20.                         list-style:none;
  21.                         margin-left:40px;
  22.                         background-color:red;
  23.                         text-align:center;
  24.                         line-height:40px;
  25.                         cursor:pointer;
  26.                 }
  27.                 ul li:hover{
  28.                         background-color:yellow;
  29.                         color:gray;
  30.                 }
  31.                 .one{
  32.                         position:absolute;
  33.                         top:50px;
  34.                         left:0;
  35.                         width:600px;
  36.                         height:500px;
  37.                         background-color:brown;
  38.                 }
  39.                 .two{
  40.                         position:absolute;
  41.                         top:50px;
  42.                         left:0;
  43.                         width:600px;
  44.                         height:500px;
  45.                         background-color:#FFC0CB;
  46.                 }
  47.                 .three{
  48.                         position:absolute;
  49.                         top:50px;
  50.                         left:0;
  51.                         width:600px;
  52.                         height:500px;
  53.                         background-color:deeppink;
  54.                 }
  55.                 .four{
  56.                         position:absolute;
  57.                         top:50px;
  58.                         left:0;
  59.                         width:600px;
  60.                         height:500px;
  61.                         background-color:#808080;
  62.                 }
  63.                 p{
  64.                         width:300px;
  65.                         height:300px;
  66.                         margin-top:100px;
  67.                         margin-left:200px;
  68.                         text-align:center;
  69.                         line-height:300px;
  70.                         background-color:gray;
  71.                 }
  72.                 </style>
  73.         </head>
  74.         <body>
  75.         <div id="main">
  76.                 <ul>
  77.                         <li>商品生源地</li>
  78.                         <li>商品价格</li>
  79.                         <li>商品类型</li>
  80.                         <li>商品功能</li>
  81.                 </ul>
  82.                 <div class="one"><p>来自法国</p></div>
  83.                 <div class="two"><p>1999元</p></div>
  84.                 <div class="three"><p>手机类</p></div>
  85.                 <div class="four"><p>打电话</p></div>
  86.         </div>
  87.         <script>
  88.         var div=document.getElementById('main').getElementsByTagName('div');
  89.         var li=document.getElementsByTagName('li');
  90.             for( var i=0;i<li.length;i++)
  91.             {
  92.                 li[i].onclick=function()
  93.                 {
  94.                     for( var i=0;i<div.length;i++)
  95.                     {   div[i].style.zIndex=-1;

  96.                     }
  97.                     if(this.innerText=='商品价格')
  98.                     {
  99.                         div[1].style.zIndex=1;
  100.                     }
  101.                }
  102.             }
  103.         </script>
  104.         </body>
  105. </html>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-30 23:44:25 From FishC Mobile | 显示全部楼层
只有position为relative/absolute/fixed的元素,z-index属性才起作用。注意,是该元素本身。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-31 00:01:27 | 显示全部楼层    本楼为最佳答案   
前面的贴请结贴。
  1. <!DOCTYPE html>
  2. <html>
  3.         <head>
  4.                 <meta charset="utf-8">
  5.                 <title>top栏切换</title>
  6.                 <style>
  7.                 #main{
  8.                         position:relative;
  9.                         width:600px;
  10.                         height:500px;
  11.                         background-color:gray;
  12.                         margin:0 auto;
  13.                 }
  14.                 ul{
  15.                         display:flex;
  16.                         height:50px;
  17.                         background-color:green;
  18.                 }
  19.                 ul li{
  20.                         list-style:none;
  21.                         margin-left:40px;
  22.                         background-color:red;
  23.                         text-align:center;
  24.                         line-height:40px;
  25.                         cursor:pointer;
  26.                 }
  27.                 ul li:hover{
  28.                         background-color:yellow;
  29.                         color:gray;
  30.                 }
  31.                 .one{
  32.                         position:absolute;
  33.                         top:50px;
  34.                         left:0;
  35.                         width:600px;
  36.                         height:500px;
  37.                         background-color:brown;
  38.                 }
  39.                 .two{
  40.                         position:absolute;
  41.                         top:50px;
  42.                         left:0;
  43.                         width:600px;
  44.                         height:500px;
  45.                         background-color:#FFC0CB;
  46.                 }
  47.                 .three{
  48.                         position:absolute;
  49.                         top:50px;
  50.                         left:0;
  51.                         width:600px;
  52.                         height:500px;
  53.                         background-color:deeppink;
  54.                 }
  55.                 .four{
  56.                         position:absolute;
  57.                         top:50px;
  58.                         left:0;
  59.                         width:600px;
  60.                         height:500px;
  61.                         background-color:#808080;
  62.                 }
  63.                 p{
  64.                         width:300px;
  65.                         height:300px;
  66.                         margin-top:100px;
  67.                         margin-left:200px;
  68.                         text-align:center;
  69.                         line-height:300px;
  70.                         background-color:gray;
  71.                 }
  72.                 </style>
  73.         </head>
  74.         <body>
  75.         <div id="main">
  76.                 <ul>
  77.                         <li>商品生源地</li>
  78.                         <li>商品价格</li>
  79.                         <li>商品类型</li>
  80.                         <li>商品功能</li>
  81.                 </ul>
  82.                 <div class="one"><p>来自法国</p></div>
  83.                 <div class="two"><p>1999元</p></div>
  84.                 <div class="three"><p>手机类</p></div>
  85.                 <div class="four"><p>打电话</p></div>
  86.         </div>
  87.         <script>
  88.         var div=document.getElementById('main').getElementsByTagName('div');
  89.         var li=document.getElementsByTagName('li');
  90.             for( var i=0;i<li.length;i++)
  91.             {
  92.                 li[i].onclick=function()
  93.                 {
  94.                     for( var i=0;i<div.length;i++)
  95.                     {   div[i].style.zIndex=-1;

  96.                     }
  97.                     if(this.innerText=='商品价格')
  98.                     {
  99.                         div[1].style.zIndex=1;
  100.                     }
  101.                }
  102.             }
  103.         </script>
  104.         </body>
  105. </html>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-31 00:12:46 | 显示全部楼层
wp231957 发表于 2022-3-30 23:44
只有position为relative/absolute/fixed的元素,z-index属性才起作用。注意,是该元素本身。

我设置了的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-31 12:42:39 | 显示全部楼层
如问题代码:

  1.         <script>
  2.         var div=document.getElementById('main').getElementsByTagName('div');
  3.         var li=document.getElementsByTagName('li');
  4.         for(var k=0; k<li.length; k++){
  5.             li[k].onclick=function(){
  6.                 console.log(k);
  7.             }
  8.         }               
  9.         </script>
复制代码

再次回复你之前说的function中调用 i 出错的问题。更正这里的 i 变量 问题不是作用域问题 ,而是 代码形成了闭包,闭包中局部变量是引用而非值

解析问题代码:
1. 首先闭包中局部变量是引用,也就是说 console.log(k); 中的 k 是个地址,而不是值。
2. script代码在页面加载便执行。
3. 经过一轮 for(var k=0; k<li.length; k++) 后 k 最后的值是 k==li.length,k超出了数组下标。
4. 当进行点击li测试时,所有的onclick函数中的k其实是个地址,值k==li.lenght。在你原代码中 i,i超出数组下标,报错。

3种解决办法:
1. 标记法

  1.        <script>
  2.         var div=document.getElementById('main').getElementsByTagName('div');
  3.         var li=document.getElementsByTagName('li');
  4.         for(var k=0; k<li.length; k++){
  5.             li[k].flag = k; // 添加flag用于存储 k 的值
  6.             li[k].onclick=function(){
  7.                 console.log(this.flag);
  8.             }
  9.         }               
  10.         </script>
复制代码


2.

  1.         <script>
  2.         var div=document.getElementById('main').getElementsByTagName('div');
  3.         var li=document.getElementsByTagName('li');
  4.         for(var k=0; k<li.length; k++){            
  5.             li[k].onclick=(function(j){
  6.                 return function(){
  7.                     console.log(j);
  8.                 }
  9.             })(k);
  10.         }               
  11.         </script>
复制代码


3.

  1.         <script>
  2.         var div=document.getElementById('main').getElementsByTagName('div');
  3.         var li=document.getElementsByTagName('li');
  4.         for(var k=0; k<li.length; k++){            
  5.             (function(j){
  6.                 li[k].onclick= function(){
  7.                     console.log(j);
  8.                 }
  9.             })(k);
  10.         }               
  11.         </script>
复制代码


测试代码:

  1. <!DOCTYPE html>
  2. <html>
  3.         <head>
  4.                 <meta charset="utf-8">
  5.                 <title>top栏切换</title>
  6.                 <style>
  7.                 #main{
  8.                         position:relative;
  9.                         width:600px;
  10.                         height:500px;
  11.                         background-color:gray;
  12.                         margin:0 auto;
  13.                 }
  14.                 ul{
  15.                         display:flex;
  16.                         height:50px;
  17.                         background-color:green;
  18.                 }
  19.                 ul li{
  20.                         list-style:none;
  21.                         margin-left:40px;
  22.                         background-color:red;
  23.                         text-align:center;
  24.                         line-height:40px;
  25.                         cursor:pointer;
  26.                 }
  27.                 ul li:hover{
  28.                         background-color:yellow;
  29.                         color:gray;
  30.                 }
  31.                 .one{
  32.                         position:absolute;
  33.                         top:50px;
  34.                         left:0;
  35.                         width:600px;
  36.                         height:500px;
  37.                         background-color:brown;
  38.                 }
  39.                 .two{
  40.                         position:absolute;
  41.                         top:50px;
  42.                         left:0;
  43.                         width:600px;
  44.                         height:500px;
  45.                         background-color:#FFC0CB;
  46.                 }
  47.                 .three{
  48.                         position:absolute;
  49.                         top:50px;
  50.                         left:0;
  51.                         width:600px;
  52.                         height:500px;
  53.                         background-color:deeppink;
  54.                 }
  55.                 .four{
  56.                         position:absolute;
  57.                         top:50px;
  58.                         left:0;
  59.                         width:600px;
  60.                         height:500px;
  61.                         background-color:#808080;
  62.                 }
  63.                 p{
  64.                         width:300px;
  65.                         height:300px;
  66.                         margin-top:100px;
  67.                         margin-left:200px;
  68.                         text-align:center;
  69.                         line-height:300px;
  70.                         background-color:gray;
  71.                 }
  72.                 </style>
  73.         </head>
  74.         <body>
  75.         <div id="main">
  76.                 <ul>
  77.                         <li>商品生源地</li>
  78.                         <li>商品价格</li>
  79.                         <li>商品类型</li>
  80.                         <li>商品功能</li>
  81.                 </ul>
  82.                 <div class="one"><p>来自法国</p></div>
  83.                 <div class="two"><p>1999元</p></div>
  84.                 <div class="three"><p>手机类</p></div>
  85.                 <div class="four"><p>打电话</p></div>
  86.         </div>
  87.         <script>
  88.         var div=document.getElementById('main').getElementsByTagName('div');
  89.         var li=document.getElementsByTagName('li');
  90.         for(var k=0; k<li.length; k++){
  91.             // 问题代码(最终k的值==li.length)
  92.             li[k].onclick=function(){
  93.                 console.log(k);
  94.             }
  95.             
  96.             // 方法1
  97.             //li[k].flag = k;
  98.             //li[k].onclick=function(){
  99.             //    console.log(this.flag);
  100.             //}
  101.             
  102.             // 方法2
  103.             //li[k].onclick=(function(j){
  104.             //    return function(){
  105.             //        console.log(j);
  106.             //    }
  107.             //})(k);
  108.             
  109.             // 方法3
  110.             //(function(j){
  111.             //    li[k].onclick= function(){
  112.             //        console.log(j);
  113.             //    }
  114.             //})(k);
  115.         }               
  116.         </script>
  117.         </body>
  118. </html>

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表