Bootstrap

jQuery学习总结3

目录

一、jQuery事件机制

二、jQuery注册事件的发展历程

1.简单事件绑定 click()

2.bind方式注册事件

3.delegate注册委托事件

4.jQuery1.7之后,jQuery用on统一了所有事件的注册方式

三、事件解绑

1.unbind方式(不用)

2.undelegate方式

3.off方式(推荐)

四、jQuery事件对象


一、jQuery事件机制

JavaScript中已经学习了事件,jQuery对JavaScript事件进行了封装,增加并扩展了事件处理机制。jQuery不仅提供了更加优雅的事件处理语法,而且极大地增强了事件的处理能力。

二、jQuery注册事件的发展历程

1.简单事件绑定 click()

不支持同时注册,也不支持动态注册。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
    <div></div>
    <script src="jq.min.js"></script>
    <script>
        $(function() {
            $('div').click(function() {
                console.log('鼠标单击事件');
            })
            $('div').mouseenter(function() {
                console.log('鼠标移入事件');
            })
        })
    </script>
</body>
</html>

2.bind方式注册事件

支持同时注册但是不支持动态注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
    <div></div>
    <script src="jq.min.js"></script>
    <script>
        $(function() {
            $('div').bind({
                mouseenter: function() {
                    console.log('鼠标移入事件');
                },
                click: function() {
                    console.log('鼠标单击事件');
                }
            })
        })
    </script>
</body>
</html>

3.delegate注册委托事件

支持同时注册,也支持动态注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
    <div></div>
    <script src="jq.min.js"></script>
    <script>
        $(function() {
            $('body').delegate('div',{
                mouseenter: function() {
                    console.log('鼠标移入事件');
                },
                click: function() {
                    console.log('鼠标单击事件');
                }
            })
        })
    </script>
</body>
</html>

4.jQuery1.7之后,jQuery用on统一了所有事件的注册方式

(1)on注册简单事件

//表示给$(元素)绑定事件,并且由自己触发,不支持动态绑定
$(元素).on('click',function() {});

(2)on注册委托事件

//表示给$(元素)绑定代理事件,当必须是它的内部元素才能触发这个事件,支持动态绑定
$(元素).on('click','内部元素',function() {});

(3)事件委托原理

var ul = document.querySelector('#ul');
ul.onclick = function(e) {
    if(e.target.tagNAme.toLowerCase() === 'li') {
        console.log(e.target);
    }
}

三、事件解绑

1.unbind方式(不用)

$().unbind();
//解绑所有事件
$().unbind('click');
//解绑指定事件

2.undelegate方式

$(元素).undelegate();
//解绑所有的delegate事件
$(元素).undelegate('click');
//解绑所有的click事件

3.off方式(推荐)

$(元素).off();
//解绑匹配元素的所有事件
$(元素).off('click');
//解绑匹配元素的所有click事件

四、jQuery事件对象

jQuery事件对象其实就是js事件对象的一个封装,处理了兼容性;一般用事件参数e来获取

1.screenX和screenY  对应屏幕最左上角的值

2.clientX和clientY  距离页面左上角位置(忽视滚动条)

3.pageX和pageY  距离页面最顶部的左上角的位置(会计算滚动条的距离)

4.event.stoPropagation()  阻止事件冒泡行为

5.event.preventDefault()  阻止浏览器默认行为

6.return false;  既能阻止事件冒泡,又能阻止浏览器默认行为

7.event.keyCode  按下的键盘代码

;