在这里我们将对比Web提供的事件API与jQuery 事件函数间的差别。jQuery给我们提供了非常好的事件API,但理解好底层是如何实现的可以帮助我们更好的使用jQuery,同时遇到错误也能修复。
- 发送DOM事件
- 发送自定义事件
- 监听事件
- 移除事件句柄
- 修改事件
- 事件预测
- 键盘事件
- 鼠标事件
- 浏览器加载事件
- 老式浏览器的支持
DOM事件发送
以点击事件为例:
focus/blur/submit语法相同
jQuery
DOM API
自定义事件
jQuery
$('element').trigger('custom-event');
|
DOM API
var event = document.createEvent('Event'); event.initEvent('custom-event', true, true); someElement.dispatchEvent(event); var event = new CustomEvent('custom-event', {bubbles: true, cancelable: true}); someElement.dispatchEvent(event);
|
事件监听
jQuery
$('element').on('click', function(){ })
|
DOM API
element.addEventLister('click', function(){ })
|
移除事件
jQuery
$('element').off('click', myEventHander);
|
DOM API
elment.removeEventLister('click', myEventHander);
|
事件修改
阻止事件冒泡
jQuery
$(element).on('event', function(event){ event.stopPropagation(); })
|
DOM API
element.addEventListener('event', function(event){ event.stopPropagation(); })
|
阻止其它事件对当前元素的影响
jQuery
$(element).on('event', function(event){ event.stopImmediatePropagation(); })
|
DOM API
element.addEventListener('event', function(event){ event.stopImmediatePropagation(); })
|
阻止浏览器默认事件,比如一个a标签的跳转事件
jQuery
$(Aelement).on('click', function(event){ event.stopPropagation(); })
|
DOM API
Aelement.addEventListener('click', function(event){ event.preventDefault(); })
|
预测事件
<ul id="my-list"> <li>foo <button>x</button></li> <li>bar <button>x</button></li> <li>abc <button>x</button></li> <li>123 <button>x</button></li> </ul>
|
点击按钮的时候删除其li标签
jquery
$('#my-list').on('click', 'BUTTON', function() { $(this).parent().remove(); });
|
DOM API
document.getElementById('my-list').addEventListener('click', function(event) { var clickedEl = event.target; if(clickedEl.tagName === 'BUTTON') { var listItem = clickedEl.parentNode; listItem.parentNode.removeChild(listItem); } });
|
键盘事件
jquery
$(document).keydown(function(event){ if(event.ctrlkey && event.which === 72){ } })
|
DOM API
document.addEventListener('keydown', function(event) { if (event.ctrlKey && event.which === 72) { } });
|
鼠标事件
jquery
$('element').hover(function hoverIn(){ }, function hoverOut(){ })
|
DOM API
someEl.addEventListener('mouseover', function() { }); someEl.addEventListener('mouseout', function() { });
|
浏览器加载事件
jquery
$(window).load(function(){ })
|
DOM API
window.addEventListener('load', function(){ })
|
文档加载完毕但未渲染
jquery
$(document).ready(function(){ })
|
DOM API
document.addEventListener('DOMContentLoaded',function(){ })
|
jquery
DOM API