注:此文只是适用于个人学习笔记
参考书籍:jQuery基础教程(第四版)点击下载
3.1 在页面加载后执行任务
(1)通过$(document).ready()注册的事件处理程序,则会在DOM完全就绪并可以使用时调用。虽然这也意味着所有元素对脚本而言都是可以访问的,但是,却不意味着所有关联的文件都已经下载完毕
(2)由于很多库都使用$标识符(因为它简短方便),因此就需要一种方式来避免名称冲突。
jQuery提供了一个jQuery.noConflict()方法,调用该方法可以把对$标识符的控制权让渡还给其他库。
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
jQuery(document).ready(function($) {
//在这里,可以正常使用!
});
</script>
3.2 处理简单的事件
(1)多次调用.on()也没有任何问题
$(document).ready(function() {
$('#switcher-default').on('click', function() {
$('body').removeClass('narrow');
$('body').removeClass('large');
});
$('#switcher-narrow').on('click', function() {
$('body').addClass('narrow');
$('body').removeClass('large');
});
$('#switcher-large').on('click', function() {
$('body').removeClass('narrow');
$('body').addClass('large');
});
});
3.3 事件传播
(1).hover()方法接受两个函数参数。第一个函数会在鼠标
指针进入被选择的元素时执行,而第二个函数会在鼠标指针离开该元素时触发
$(document).ready(function() {
$('#switcher h3').hover(function() {
$(this).addClass('hover');
}, function() {
$(this).removeClass('hover');
});
});
(2)允许多个元素响应单击事件的一种策略叫做事件捕获。在事件捕获的过程中,事件首先会交给最外层的元素,接着再交给更具体的元素。
(3)事件冒泡:即当事件发生时,会首先发送给最具体的元素,在这个元素获得响应机会之后,事件会向上冒泡到更一般的元素。 事件冒泡可能会导致始料不及的行为,特别是在错误的元素响应mouseover或mouseout事件的情况下。
3.4 通过事件对象改变事件的旅程
(1)事件对象是一种DOM结构,它会在元素获得处理事件的机会时传递给被调用的事件处理程序。这个对象中包含着与事件有关的信息(例如事件发生时的鼠标指针位置),也提供了可以用来影响事件在DOM中传递进程的一些方法。
(2)通过.target,可以确定DOM中首先接收到事件的元素(即实际被单击的元素)。而且,我们知道this引用的是处理事件的DOM元素
$(document).ready(function() {
$('#switcher').click(function(event) {
if (event.target == this) {
$('#switcher button').toggleClass('hidden');
}
});
});
(3)通过调用event.stopPropagation()就可以避免其他所有DOM元素响应这个事件
(4)如果我们把单击事件处理程序注册到锚元素( <a>),而不是外层的<div>上,那么就要面对另外一个问题:当用户单链接时,浏览器会加载一个新页面。这种行为与我们讨论的事件处理程序不是同一个概念,它是单击锚元素的默认操作。类似地,当用户在编辑完表单后按下回车键时,会触发表单的submit事件,在此事件发生后,表单提交才会真正发生。
即便在事件对象上调用.stopPropagation()方法也不能禁止这种默认操作,因为默认操作不是在正常的事件传播流中发生的。在这种情况下, .preventDefault()方法则可以在触发默认操作之前终止事件
(5).is()。这个方法接收一个选择符表达式(第2章介绍过),然后用选择符来测试当前的jQuery对象。如果集合中至少有一个元素与选择符匹配, .is()返回true。