JavaScript事件
JavaScript是前端开发中用得比较广泛的语言,JavaScript中有很多的特性,其中常见的一个特性就是事件。在JavaScript中,事件是由用户触发或浏览器自动触发某些动作所产生的,例如输入文本、点击按钮、页面加载等等。本文将简单总结JavaScript事件。
1.事件的三要素
事件一般包含三个要素:事件源、事件类型和事件处理程序。这三个要素可以用如下的代码表示:
// 事件源
var btn = document.getElementById('myButton');
// 事件类型
var eventType = 'click';
// 事件处理程序
var handler = function () {
alert('Hello world!');
};
// 给按钮添加事件
btn.addEventListener(eventType, handler);
2.DOM0级事件处理程序
DOM0级事件处理程序指的是直接将一个函数赋值给某个元素的事件属性,例如:
var btn = document.getElementById('myButton');
btn.onclick = function () {
alert('Hello world!');
};
当事件被触发时,会自动调用该函数。
3.DOM2级事件处理程序
DOM2级事件处理程序是通过addEventListener()方法来注册事件处理程序的,例如:
var btn = document.getElementById('myButton');
btn.addEventListener('click', function () {
alert('Hello world!');
}, false);
其中,第一个参数是事件类型,第二个参数是要执行的函数,第三个参数表示事件冒泡(false为停止,true为开启)。
4.事件捕获和事件冒泡
事件捕获和事件冒泡是两种不同的事件传播机制。
事件捕获是从最外层的元素开始,逐层向内直到目标元素,然后触发目标元素的事件处理程序,例如:
var div1 = document.getElementById('div1');
var div2 = document.getElementById('div2');
var btn = document.getElementById('myButton');
document.addEventListener('click', function () {
alert('document');
}, true);
div1.addEventListener('click', function () {
alert('div1');
}, true);
div2.addEventListener('click', function () {
alert('div2');
}, true);
btn.addEventListener('click', function () {
alert('btn');
}, true);
事件冒泡是从目标元素开始,逐层向外直到最外层的元素,然后触发最外层元素的事件处理程序,例如:
var div1 = document.getElementById('div1');
var div2 = document.getElementById('div2');
var btn = document.getElementById('myButton');
document.addEventListener('click', function () {
alert('document');
}, false);
div1.addEventListener('click', function () {
alert('div1');
}, false);
div2.addEventListener('click', function () {
alert('div2');
}, false);
btn.addEventListener('click', function () {
alert('btn');
}, false);
在事件处理程序中,可以使用event对象来获取事件的相关信息,例如:
5.event对象
5.1 常用的event属性
var btn = document.getElementById('myButton');
btn.onclick = function (event) {
alert(event.type); // 'click'
alert(event.target); // 按钮元素
alert(event.clientX + ',' + event.clientY); // 鼠标点击位置的坐标
};
其中,event.type表示事件类型,event.target表示事件源,event.clientX和event.clientY表示鼠标点击位置的坐标。
5.2 阻止事件默认行为和事件传播
有时候需要阻止事件的默认行为或事件的传播,可以使用event对象的preventDefault()和stopPropagation()方法,例如:
var link = document.getElementById('myLink');
link.onclick = function (event) {
event.preventDefault(); // 阻止链接的默认跳转行为
event.stopPropagation(); // 阻止事件冒泡
};
6.事件代理
事件代理指的是利用事件冒泡原理,将事件绑定到父级元素上,通过判断事件源来执行相应的处理程序。这种方式可以减少事件处理程序的数量,提高性能。例如:
var list = document.getElementById('myList');
list.addEventListener('click', function (event) {
if (event.target.nodeName.toLowerCase() === 'li') {
alert('You clicked on an li element!');
}
}, false);
这段代码会将click事件绑定到ul元素上,当用户点击li元素时,会通过判断事件源来执行相应的处理程序。
7.总结
JavaScript中的事件是由用户触发或浏览器自动触发某些动作所产生的,可以通过DOM0级事件处理程序或DOM2级事件处理程序来注册事件处理程序,事件捕获和事件冒泡是两种不同的事件传播机制。事件处理程序中可以使用event对象来获取事件的相关信息,可以阻止事件的默认行为或事件的传播,可以使用事件代理来提高性能。