Blogger Information
Blog 18
fans 0
comment 0
visits 9888
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
异步编程原理05-14
偏执的博客
Original
610 people have browsed it

单线程:JavaScript是基于单线程的,所有任务都需要排队,前一个任务结束,才会执行后一个任务。

任务队列:同步任务和异步任务。同步任务指的是,在主线程上排队执行的任务;异步任务指的是,那些准备执行、被放在"任务队列"中的任务,一旦主线程上的所有同步任务执行完毕,队列中的任务就会结束等待的状态,开始执行

事件循坏:主线程从队列中读取任务的过程是循环不断的。

同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。

异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理,这样就可以提高执行的效率了,即异步是我们发出的一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在此过程中,我们可以继续做其他操作,不管它怎么发出请求,不关心它怎么处理数据。

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表格操作</title>
    <style>
        table,tr,td{
            border:solid gray;
            text-align:center;
            border-collapse:collapse;
        }
        thead{background-color:lightseagreen;}
        tr td:nth-of-type(2){width:300px;}
        tr td:nth-of-type(3){width:100px;}
        tr td:nth-of-type(4){width:100px;}

    </style>

</head>
<body>
<table id="cart">
    <caption>购物车</caption>
    <thead>
    <tr>
        <td><input type="checkbox" id="all"></td>
        <td>产品名称</td>
        <td>操作方式</td>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td><input type="checkbox" name="user-select"></td>
        <td>MacBookPro</td>
        <td><button onclick="edit(this)">编辑</button><button onclick="del(this)">删除</button></td>
    </tr>

    <tr>
        <td><input type="checkbox" name="user-select"></td>
        <td>MateBookXPro</td>
        <td><button onclick="edit(this)">编辑</button><button onclick="del(this)">删除</button></td>
    </tr>

    <tr>
        <td><input type="checkbox" name="user-select"></td>
        <td>DellG7</td>
        <td><button onclick="edit(this)">编辑</button><button onclick="del(this)">删除</button></td>
    </tr>

    <tr>
        <td><input type="checkbox" name="user-select"></td>
        <td>AlWA51M</td>
        <td><button onclick="edit(this)">编辑</button><button onclick="del(this)">删除</button></td>
    </tr>

    </tbody>
</table>
<button id="del-All" disabled>全部删除</button>
<script>
    // 获取表格
    var table = document.getElementById('cart');
    // 获取tbody
    var tbody = document.getElementsByTagName('table')[0].tBodies[0];
    // 获取全选按钮
    var all = document.getElementById('all');
    // 获取每行的复选框
    var user = document.getElementsByName('user-select');
    // 获取全部删除按钮
    var btn = document.getElementById('del-All');
    // 给全选复选框, 通过input事件, 添加全选功能
    all.addEventListener('input',getAll,false);
    function getAll(){
        // 用if语句判断是否勾选了全选的复选框
        if(all.checked === true){

            // 获取所有被选中的复选框,并将其设置为选中状态
            user.forEach(function (value) {
                value.checked = true;
            });
            // 设置全部删除按钮为可点击状态
            btn.disabled = false;
        }else { // 用户取消了全选按钮
            // 还原所有行的复选框
           user.forEach(function(value){
                value.checked = false;
            });
            // 设置全部删除按钮为禁止状态
            btn.disabled = true;
        }
    }

    // 全部删除事件
    btn.addEventListener('click',delAll,false);

    // 全部删除事件触发函数
    function delAll(){
        if (confirm('是否全部删除')){
            // 获取tbody
            var tbody = document.getElementsByTagName('table')[0].tBodies[0];
            // 将tbody 内容置空却可
            tbody.innerHTML = '';
            // 全部删除按钮无效
            btn.disabled = true;
            // 全选按钮还原
            all.checked = false;

            // 可选操作, 给用户一个提示,让用户再添加一些商品到购物车,增加成交率
            var p = document.createElement('p');
            p.style.color = 'red';
            p.innerText = '购物车啥也木有了, 赶紧添加一些吧!';
            document.body.appendChild(p);

        }
    }

    // 获取网页中的tbody
    var tbody = document.getElementsByTagName('table')[0].tBodies[0];

    // 删除单个商品的按钮操作函数
    function del(ele) {
        if (confirm('是否确认删除')){
            // ele.parentElement: <td>    //button的父级是<td>
            // ele.parentElement.parentElement: <tr>        //button父级的父级是<tr>

            // 删除tbody中的<tr>
            tbody.removeChild(ele.parentElement.parentElement);
        }
    }


    // 编辑按钮函数
    function edit(ele) {
        // 获取编辑内容,位置在当前按钮的父级元素的前一个兄弟元素
        var td = ele.parentElement.previousElementSibling;
        // 获取原始的内容
        var oldContent = td.innerHTML;
        // 设置编辑对话框,点击确定会返回新的内容,取消会返回null
        var newContent = prompt('请输入要更新的内容',oldContent);

        //用if语句判断,如果返回值不等于null,说明用户点击了确认按钮
        if (newContent !== null) {    //!==  不等于
            td.innerHTML = newContent    //返回为true时,更新内容
        }else {
            return false;       //否则返回null,原内容不改变
        }
    }

</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post