zoukankan      html  css  js  c++  java
  • JS中响应函数和for循环执行问题

    一个简单的HTML页面,点击delete可以进行删除操作。现在分析其部分的响应函数和for循环的问题,其余省略。

    给出其HTML代码:

    <body>
        <table id="employeeTable" border="1" cellspacing="0">
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Salary</th>
                <th>&nbsp</th>
            </tr>
            <tr>
                <td>Tom1</td>
                <td>tom@tom.com</td>
                <td>5000</td>
                <td><a href="#">Delete</a></td>
            </tr>
            <tr>
                <td>Tom2</td>
                <td>tom@tom.com</td>
                <td>5000</td>
                <td><a href="#">Delete</a></td>
            </tr>
            <tr>
                <td>Tom3</td>
                <td>tom@tom.com</td>
                <td>5000</td>
                <td><a href="#">Delete</a></td>
            </tr>
        </table>
    </body>

    仔细分析JS代码:

    <script>
            window.onload = function () {
                //获取所有的超链接
                var allA = document.getElementsByTagName("a");
                
                //为每一个超链接绑定一个单击响应函数
                for (var i = 0; i < allA.length; i++) {
                   allA[i].onclick = function () {
    alert(allA[i]); } } }
    </script>

    当在浏览器点击delete的时候,会出现如下结果:

    这里为什么不是allA[i]呢?继续看下面的代码:

     <script>
            window.onload = function () {
                //获取所有的超链接
                var allA = document.getElementsByTagName("a");
                
                //为每一个超链接绑定一个单击响应函数
                for (var i = 0; i < allA.length; i++) {
    
                    alert("for循环正在执行"+i);
    
                    allA[i].onclick = function () {
    
                        alert("响应函数正在执行"+i);
         
                    }
                }
    
            }
        </script>

     原来for循环会在页面加载完就立即执行,而响应函数是在点击的时候才会执行,此时i经过for循环已经成为3了,超过了数组下标,所以显示undefined。

  • 相关阅读:
    jQuery $.each用法
    关于jQuery中的attr和data问题
    AngularJS入门基础PPT(附下载链接)
    依赖注入 | Dependency Injection
    ng事件中为变量的参数
    angularjs factory,service,provider 自定义服务的不同
    $digest already in progress
    理解Angular中的$apply()以及$digest()
    LeetCode 最长连续递增序列
    LeetCode 岛屿的最大面积
  • 原文地址:https://www.cnblogs.com/springa/p/12739347.html
Copyright © 2011-2022 走看看