2023-03-17_DOMDAY04-Dom0和Dom2以及事

2023-03-16  本文已影响0人  远方的路_

1. DOM0事件绑定和解绑

2. Dom2事件绑定和解绑

前提:DOM2事件添加和解绑高低浏览器使用的方法是不同的

box.addEventListener('click',function(){
    console.log('老马去红浪漫');
});
function fn(){
    console.log('马斯托洛夫斯基');
}
box.addEventListener('click',fn);

function fn1(){
    console.log('马坚强');
}
box.addEventListener('click',fn1);
btn.onclick = function(){
    box.removeEventListener('click',function(){
        console.log('布鲁斯马!');
    });
}  //解绑不了,因为回调函数和绑定的虽然看着一样,但是不是同一个函数
function fn(){
    console.log('杰森斯坦马');
}
box.addEventListener('click',fn);                           
btn.onclick = function(){
    box.removeEventListener('click',fn);
}
//低级浏览器
//添加事件监听
box.attachEvent('onclick',function(){
    console.log('哈哈');
})              
function fn1(){
    console.log('嘿嘿');
}
box.attachEvent('onclick',fn1);
function fn1(){
    console.log('嘿嘿');
}
box.attachEvent('onclick',fn1);
btn.onclick = function(){
        box.detachEvent('onclick',fn1);
}
DOM0和DOM2.jpg

3. 事件流

3.1 DOM0事件的事件流(默认冒泡)

3.2 DOM2事件的事件流(默认冒泡)

总结:DOM0事件及低级浏览器的DOM2事件(没有第三个参数)都是只有冒泡,以后用的最多的也是冒泡,捕获几乎不用,高级浏览器的DOM2事件可以根据第三个参数选择是捕获还是冒泡,一般都不写,默认是冒泡


4. 事件委派

4.1 什么是事件委派

4.2 事件委派用法

总结 :
  事件委派其实是借用事件冒泡去做的,因为事件冒泡导致内部所有的元素发生事件都会冒泡到祖先身上,我们不在子元素身上去添加事件监听和处理,而是在共同的祖先身上去添加,让祖先去处理子元素发生的事件;祖先去处理其实就是通过事件对象当中的target 去获取到真正发生事件的子元素;对子元素进行处理
  可以通过事件对象的target属性来找到你真实操作的那个标签
  通过target的nodeName就知道我移入的是哪个标签(大写标签 eg: UL/LI/SPAN)

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>事件委派-为什么要学习事件委派</title>
    </head>
    <body>
        <ul>
            <li>红酒搓</li>
            <li>牛奶搓</li>
            <li>醋搓</li>
            <li>辣椒搓</li>
        </ul>

        <button>添加</button>

        <script>
            var btn = document.querySelector('button');
            var ul = document.querySelector('ul');

            // 点击按钮之后给ul添加li
            btn.onclick = function(){
                var li = document.createElement('li');
                li.innerHTML = '搓搓搓';

                ul.append(li);
            }
            ul.onmouseover = function(event){
                if(event.target.nodeName == 'LI'){
                    event.target.style.backgroundColor = 'skyblue';
                }
            }
            ul.onmouseout = function(event){
                if(event.target.nodeName == 'LI'){
                    event.target.style.backgroundColor = '';
                }
            }
            // 高亮
            // 注意 今天我们使用的移入移出 是onmouseover onmousepout
            // var li_list =document.querySelectorAll('li');
            // console.log(li_list.length);

            // for(var i = 0; i < li_list.length; i++){
            //     li_list[i].onmouseover = function(){
            //         this.style.backgroundColor = 'yellowgreen';
            //     }

            //     li_list[i].onmouseout = function(){
            //         this.style.backgroundColor = '';
            //     }
            // }
        </script>
    </body>
</html>
<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>事件委派-移入的标签的内部还有标签</title>
    </head>
    <body>
        <ul>
            <li>麻婆豆腐</li>
            <li>青椒皮蛋</li>
            <li>蒜苗回锅肉</li>
            <li>
                <span>香菜牛肉</span>
            </li>
        </ul>
        <script>
            var ul = document.querySelector('ul');

            ul.onmouseover = function(event){
                if(event.target.nodeName == 'LI'){
                    event.target.style.backgroundColor = 'skyblue';
                }else if(event.target.parentElement.nodeName == 'LI'){
                    event.target.parentElement.style.backgroundColor = 'skyblue';
                }
            }

            ul.onmouseout = function(event){
                if(event.target.nodeName == 'LI'){
                    event.target.style.backgroundColor = '';
                }else if(event.target.parentElement.nodeName == 'LI'){
                    event.target.parentElement.style.backgroundColor = '';
                }
            }
        </script>
    </body>
</html>

5. 两对移入移出区别

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>13_作业</title>
        <style>
            .container {
                width: 800px;
                height: 500px;
                border: 1px solid #000;
                margin: 50px auto;
                padding: 15px;
            }
            table {
                table-layout: fixed;
                text-align: center;
                table-layout: fixed;
                border-collapse: collapse;
                width: 600px;
                margin: 30px auto;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <!-- <form action="#"> -->
                <label> 姓名: <input type="text" id="name"/> </label>
                <label> 年龄: <input type="text" id="age"/> </label>
                <label> 性别: <input type="text" id="gender"/> </label>
                <button id="btn">添加</button>
            <!-- </form> -->
            <table border="1">
                <tr>
                    <th>姓名</th>
                    <th>年龄</th>
                    <th>性别</th>
                    <th>操作</th>
                </tr>
                <tr>
                    <td>马大</td>
                    <td>18</td>
                    <td>男</td>
                    <td>
                        <a href="#">删除</a>
                    </td>
                </tr>
                <tr>
                    <td>马二</td>
                    <td>16</td>
                    <td>男</td>
                    <td>
                        <a href="#">删除</a>
                    </td>
                </tr>
            </table>
        </div>
        <script>
            var addBtn = document.querySelector('#btn')
            var tableTbody = document.querySelector('table tbody')
            
    addBtn.addEventListener('click', function() {
                // (1) 获取文本框中的内容
                var input = document.querySelectorAll('input')
                // name
                var nameVal = input[0].value
                // age
                var ageVal = input[1].value
                // gender
                var genderVal = input[2].value
                
                var tr = document.createElement('tr')

                var td_name = document.createElement('td')
                td_name.innerHTML = nameVal
                tr.append(td_name)

                var td_age = document.createElement('td')
                td_age.innerHTML = ageVal
                tr.append(td_age)

                var td_gender = document.createElement('td')
                td_gender.innerHTML = genderVal
                tr.append(td_gender)

                // 有bug  超链接没有小手  因为没有href
                // var a = document.createElement('a');
                // // a.href = '#';
                // a.innerHTML = '删除';

                // var td = document.createElement('td');
                // td.append(a);

                // tr.append(td);
                var td_del = document.createElement('td')
                td_del.innerHTML = '<a href="#">删除</a>'
                tr.append(td_del)
                
                tableTbody.append(tr)

            })
            // 老对象可以实现 新增对象不生效 无法删除 需要事件委派
            // var a_list = document.querySelectorAll('a');
            // for(var i = 0; i < a_list.length; i++){
            //     a_list[i].onclick = function(){
            //         this.parentElement.parentElement.remove();
            //     }
            // }

            tableTbody.onclick = function(event) {
                if (event.target.nodeName == 'A') {
                    var flag = confirm('你确定要删除嘛?')
                    if (flag) {
                        event.target.parentElement.parentElement.remove()
                    }
                }
                
            }
        </script>
    </body>
</html>

上一篇 下一篇

猜你喜欢

热点阅读