写在前面:

  有一段时间未更新博客了,利用这段时间,重新看了《jQuery基础教程 第四版》和《锋利的jQuery 第二版》,这两本书绝对是jQuery入门非常好的书,值得多读几遍,并将上面的代码逐个敲一下来体会jQuery的魅力!

  利用接下来一段时间结合这两本书对jQuery基础知识做个梳理,算是读书笔记吧,方便他人,方便自己,不足之处,希望读者多多指教!

发文不易,转载注明出处!

内容摘要:

1.绑定事件

2.简写事件

3.复合事件

一.绑定事件

jQuery 通过.bind()方法来为元素绑定这些事件。

形式:

bind(type, [data], fn)

参数:

type 表示一个或多个类型的事件名字符串;

[data]是可选的,作为 event.data 属性值传递一个额外的数据,这个数据是一个字符串、一个数字、一个数组或一个对象;

fn 表示绑定到指定元素的处理函数。

//使用点击事件

$('input').bind('click', function () {              //点击按钮后执行匿名函数

 alert('点击!');

});

//普通处理函数

$('input').bind('click', fn);                    //执行普通函数式无须圆括号

function fn() {

  alert('点击!');

}

//可以同时绑定多个事件

 $('input').bind('mouseout mouseover', function () {     //移入和移出分别执行一次

     $('div').html(function (index, value) {

         return value + '1';

     });

 });

//通过对象键值对绑定多个参数

 $('input').bind({               //传递一个对象

   'mouseout' : function () {            //事件名的引号可以省略

     alert('移出');

   },

   'mouseover' : function () {

     alert('移入');

   }

 });

//使用 unbind 删除绑定的事件

$('input').unbind(); //删除所有当前元素的事件

//使用 unbind 参数删除指定类型事件

$('input').unbind('click'); //删除当前元素的 click 事件

//使用 unbind 参数删除指定处理函数的事件

function fn1() {

  alert('点击 1');

}

function fn2() {

  alert('点击 2');

}

$('input').bind('click', fn1);

$('input').bind('click', fn2);

$('input').unbind('click', fn1); //只删除 fn1 处理函数的事件

二.简写事件

为了使开发者更加方便的绑定事件,jQuery 封装了常用的事件以便节约更多的代码。 我们称它为简写事件。

上述简写形式大部分都很好理解,这儿只挑选几个容易迷惑的进行说明:

1.    .mouseover()和.mouseout() && .mouseenter()和.mouseleave()

.mouseover()和.mouseout()表示鼠标移入和移出的时候触发。而.mouseenter()和.mouseleave()表示鼠标穿过和穿出的时候触发。

那么这两组本质上有什么区别呢?

手册上的说明是:.mouseenter()和.mouseleave()这组穿过子元素不会触发,而.mouseover()和.mouseout()则会触发。看下面的实例:

//HTML 页面设置

 <div style="width:200px;height:200px;background:green;">

     <p style="width:100px;height:100px;background:red;"></p>

 </div>

 <strong></strong> 

//mouseover 移入

 $('div').mouseover(function () {                //移入 div 会触发,移入 p 再触发

     $('strong').html(function (index, value) {

         return value+'1';

     });

 });

//mouseenter 穿过

 $('div').mouseenter(function () {     //穿过 div 或者 p,在这个区域只触发一次

     $('strong').html(function (index, value) {   

         return value+'1';

     });

 });

同理mouseout和mouseleave。

2.   .keydown()、.keyup() && .keypress()

.keydown()、.keyup()返回的是键码,而.keypress()返回的是字符编码。

$('input').keydown(function (e) {

alert(e.keyCode);            //按下 a 返回 65

});

$('input').keypress(function (e) {

alert(e.charCode);                   //按下 a 返回 97

});

注意:e.keyCode 和 e.charCode 在两种事件互换也会产生不同的效果,除了字符还有一些非字符键的区别。更多详情可以查看我的 JavaScript事件处理的博客。

3.   .focus()和.blur() && .focusin()和.focusout()

.focus()和.blur()分别表示光标激活和丢失,事件触发时机是当前元素。而.focusin()和.focusout()也表示光标激活和丢失,但事件触发时机可以是子元素。

//HTML 部分

 <div style="width:200px;height:200px;background:red;">

     <input type="text" value="" />

 </div>

 <strong></strong>

//focus 光标激活

$('input').focus(function () {     //当前元素触发

$('strong').html('123');

});

//focusin 光标激活

$('div').focusin(function () {      //绑定的是 div 元素,子类 input 触发激活(用focus不行)

$('strong').html('123');

});

同理,.blur()和.focusout()表示光标丢失,和激活类似,一个必须当前元素触发,一个可以是子元素触发。

三.复合事件

jQuery 提供了许多最常用的事件效果, 组合一些功能实现了一些复合事件, 比如切换功 能、智能加载等。

示例:

//背景移入移出切换效果

 $('div').hover(function () {

     $(this).css('background', 'black');     //mouseenter 效果

     }, function () {

     $(this).css('background', 'red');      //mouseleave 效果,可省略

 }); 

注意:.hover()方法是结合了.mouseenter()方法和.mouseleva()方法,并非.mouseover()和.mouseout()方法。

.toggle()这个方法比较特殊,这个方法有两层含义,第一层含义就是已经被 1.8 版废用、1.9 版删除掉的用法, 也就是点击切换复合事件的用法。 第二层函数将会在后面动画篇中讲解。

既然废弃掉了,就不应该使用。被删除的原因是:以减少混乱和提高潜在的模块化程度。

但你又非常想用这个方法,并且不想自己编写类似的功能,可以下载 jquery-migrate.js文件,来向下兼容已被删除掉的方法。

示例:

//背景点击切换效果(1.9 版删除掉了,首先要引入jquery-migrate.js文件)

 <script type="text/javascript" src="jquery-migrate-1.2.1.js"></script>

 $('div').toggle(function () {            //第一次点击切换

     $(this).css('background', 'black');

     }, function () {                      //第二次点击切换

     $(this).css('background', 'blue');

     }, function () {                       //第三次点击切换

     $(this).css('background', 'red');

 });

注意:由于官方已经删除掉这个方法,所以也是不推荐使用的,如果在不基于向下兼容的插件 JS。我们可以自己实现这个功能。

 var flag = 1; //计数器

 $('div').click(function () {

     if (flag == 1) {                      //第一次点击

         $(this).css('background', 'black');

         flag = 2;

     } else if (flag == 2) {           //第二次点击

         $(this).css('background', 'blue');

         flag = 3

     } else if (flag == 3) { //第三次点击

         $(this).css('background', 'red');

         flag = 1

     }

 });

For my lover,

and thank you Mr.Lee!

jQuery事件篇---基础事件的更多相关文章

  1. jQuery事件篇---高级事件

    内容提纲: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one 发文不易,转载请注明出处! 一.模拟操作 在事件触发的时候,有时我们需要一些模拟用户行为的操作.例如:当网页加载完毕 ...

  2. jQuery-3.事件篇---自定义事件

    jQuery自定义事件之trigger事件 众所周知类似于mousedown.click.keydown等等这类型的事件都是浏览器提供的,通俗叫原生事件,这类型的事件是需要有交互行为才能被触发. 在j ...

  3. jQuery-3.事件篇---键盘事件

    jQuery键盘事件之keydown()与keyup()事件 鼠标有mousedown,mouseup之类的事件,这是根据人的手势动作分解的2个触发行为.相对应的键盘也有这类事件,将用户行为分解成2个 ...

  4. jQuery-3.事件篇---鼠标事件

    jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是点击操作.jQuery提供了两个方法一个是click方法用于监听用户单击操作,另一个方法是dbclick方法用于 ...

  5. [置顶] 一步一步学android之事件篇——下拉列表事件

    上一篇RadioGroup比较简单,所以再学习个spinner的OnItemSelectedListener事件,前面说过spinner的主要功能就是提供列表显示的选择,比如我们在选择城市的时候就会用 ...

  6. 一步一步学android之事件篇——单击事件

    在使用软件的时候单击事件必不可少,比如我想确定.取消等都需要用户的单击,所有的单击事件都是由View.OnClickListener接口来进行处理的,接口定义如下: public static int ...

  7. 一步一步学android之事件篇——触摸事件

    触摸事件顾名思义就是触摸手机屏幕触发的事件,当用户触摸添加了触摸事件的View时,就是执行OnTouch()方法进行处理,下面通过一个动态获取坐标的例子来学习OnTouchListener事件,效果如 ...

  8. jquery基础学习之事件篇(三)

    一.鼠标事件 click 单击 与 dbclick 双击 用于监听用户的点击操作,在同一元素上同时绑定 click 和 dblclick 事件是不可取的...根据浏览器支持不同一个点击事件是由mous ...

  9. jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)

    1.jQuery鼠标事件之click与dbclick事件   方法一:$ele.click()(不带参数)   <div id="test">点击触发<div&g ...

随机推荐

  1. mysql 判断表字段或索引是否存在 - 举一反三

    判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGI ...

  2. 使用apache-fileupload处理文件上传与上传多个文件 二(60)

    一 使用apache-fileupload处理文件上传 框架:是指将用户经常处理的业务进行一个代码封装.让用户可以方便的调用. 目前文件上传的(框架)组件: Apache----fileupload ...

  3. 【OCP-12c】CUUG 071题库考试原题及答案解析(13)

    13.(6-7) choose twoWhich two statements are true regarding operators used with subqueries? (Choose t ...

  4. [CISCO] 思科交换机基本配置

    思科交换机基本配置 交换机是局域网中最重要的设备,交换机是基于 MAC 来进行工作的.和路由器类似,交换 机也有 IOS,IOS 的基本使用方法是一样的.本章将简单介绍交换机的一些基本配置,以及交换 ...

  5. HEOI 十二省联考退役记

    Day -1 简要的说了些注意事项 一整天都在刷树套树的水题 退役的感觉近了 Day 0 早上收拾好东西去了火车站之后 火车站居然还没有开门 等了半天 我们是从衡水到德州再到秦皇岛 到了德州之后 去车 ...

  6. 部署到docker容器后图片验证码显示不出来

    Dockerfile如下: FROM openjdk:8-jre-alpineARG JAR_FILECOPY ${JAR_FILE} app.jarENTRYPOINT ["java&qu ...

  7. git已经删除了远程分支,本地仍然能看到

    1.使用 git branch -a 命令可以查看所有本地分支和远程分支,发现很多在远程仓库已经删除的分支在本地依然可以看到. 2.使用命令 git remote show origin,可以查看re ...

  8. 【Alpha】Phylab 展示博客

    目录 Phylab Alpha 展示博客 一.团队简介 二.项目目标 2.1 典型用户 2.2 功能描述 2.3 用户量 三.项目发布与展示 3.1 新功能 3.2 修复缺陷 3.3 问题与限制 3. ...

  9. CentOS7 安装 PostGIS方法(适合国内网络)

    安装Postgresql 9.4 yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1. ...

  10. golang (5) http 请求分析

    http 分析包分析 fmt.Println("get Content-Type: ", r.Header.Get("Content-Type")) var r ...