问答详情
源自:9-22 编程练习

添加事件后,为什么没反应??

 window.onload = function(){

                  

     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。

        var Trs=document.getElementsByTagName("tr");

        

        for(var i=1;i<Trs.length;i++){

             

             Trs[i].onmouseover=function(){

                Trs[i].style.backgroundColor="#f2f2f2"; 

             }

             

             Trs[i].onmouseout=function(){

                Trs[i].style.backgroundColor="#fff"; 

             }

         }  

}


提问者:木槿111 2017-06-06 17:30

个回答

  • 慕勒7123956
    2017-06-07 09:18:22
    已采纳

    不好意思,没看见回复,是这样的,你的window.onload函数缺了一个大括号,还有,最好是把这些函数直接写在script标签中,不要写在window.onload里面,因为del和add是在html标签里面的,当程序执行到这里的时候,如果函数在window.onload里面,html标签是获取不到这个事件的,你这个程序就只是一个大括号位置的问题,至于如何在给新添加的tr添加onmouseout和onmouseover里面

    <!DOCTYPE html>
    
    <html>
     <head>
      <title> new document </title>  
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>   
      <script type="text/javascript"> 
      
          window.onload = function(){
                     
    
             
            var Trs=document.getElementsByTagName("tr");
             for(let i=1;i<Trs.length;i++){
                 //没反应
                 Trs[i].onmouseover=function(){
                    Trs[i].style.backgroundColor="#f2f2f2"; 
                 }
                 
                 Trs[i].onmouseout=function(){
                    Trs[i].style.backgroundColor="#fff"; 
                 }
             } 
             
     
         
          // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;
          
          
       
         // 创建删除函数
       
          }
          function del(obj){
             obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);
          };
          var i=2;
          function add(obj){
              var tr=document.createElement("tr");
              var td1=document.createElement("td");
              var td2=document.createElement("td");
              var td3=document.createElement("td");
              var tab=document.getElementById("table");
              i++;
              td1.innerHTML="xh00"+i;
              td2.innerHTML="第"+i+"位同学";
              td3.innerHTML="<a href='javascript:;' onclick='del(this)' >删除</a>";
              tab.appendChild(tr);
              tr.appendChild(td1);
              tr.appendChild(td2);
              tr.appendChild(td3);
              
          }
      </script> 
     </head> 
     <body> 
      <table border="1" width="50%" id="table">
      <tr>
    <th>学号</th>
    <th>姓名</th>
    <th>操作</th>
      </tr>  
    
      <tr>
    <td>xh001</td>
    <td>王小明</td>
    <td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->
      </tr>
    
      <tr>
    <td>xh002</td>
    <td>刘小芳</td>
    <td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->
      </tr>  
    
      </table>
      <input type="button" value="添加一行" onclick="add(this)"/>  
     </body>
    </html>


  • 木槿111
    2017-06-06 20:58:51

    <!DOCTYPE html>


    <html>

     <head>

      <title> new document </title>  

      <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>   

      <script type="text/javascript"> 

      

          window.onload = function(){

                     

           /* var Trs=document.getElementsByTagName("tr");

            

            for(var i=1;i<Trs.length;i++){

                 

                 change(Trs[i]);

       }

        }

    function change(obj){

        obj.onmouseover=function(){

                    obj.style.backgroundColor="#f2f2f2"; 

                 }

                 

             obj.onmouseout=function(){

                    obj.style.backgroundColor="#fff"; 

                 }

        }  *///这样写就可以

             

             

            var Trs=document.getElementsByTagName("tr");

             for(let i=1;i<Trs.length;i++){

                 //没反应

                 Trs[i].onmouseover=function(){

                    Trs[i].style.backgroundColor="#f2f2f2"; 

                 }

                 

                 Trs[i].onmouseout=function(){

                    Trs[i].style.backgroundColor="#fff"; 

                 }

             } 

             

     

         

          // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;

          var i=2;

          function add(obj){

              var tr=document.createElement("tr");

              var td1=document.createElement("td");

              var td2=document.createElement("td");

              var td3=document.createElement("td");

              var tab=document.getElementById("table");

              i++;

              td1.innerHTML="xh00"+i;

              td2.innerHTML="第"+i+"位同学";

              td3.innerHTML="<a href='javascript:;' onclick='del(this)' >删除</a>";

              tab.appendChild(tr);

              tr.appendChild(td1);

              tr.appendChild(td2);

              tr.appendChild(td3);

              

          }

       

         // 创建删除函数

          function del(obj){

             obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);

          }

      </script> 

     </head> 

     <body> 

      <table border="1" width="50%" id="table">

      <tr>

    <th>学号</th>

    <th>姓名</th>

    <th>操作</th>

      </tr>  


      <tr>

    <td>xh001</td>

    <td>王小明</td>

    <td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->

      </tr>


      <tr>

    <td>xh002</td>

    <td>刘小芳</td>

    <td><a href="javascript:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->

      </tr>  


      </table>

      <input type="button" value="添加一行"  onclick="add(this)"/>   <!--在添加按钮上添加点击事件  -->

     </body>

    </html>


  • 木槿111
    2017-06-06 19:47:47

    "当这个程序运行的时候,循环已经完成,"??能解析一下吗


  • 慕勒7123956
    2017-06-06 19:21:07

    因为你给它绑定的这个事件的时候,用到了i变量,但是当这个程序运行的时候,循环已经完成,这个i已经是比数组的长度大了,你可以简单的把for(var i=1;i<Trs.length;i++)改成for(let i=1;i<Trs.length;i++)