[DOM Event Learning] Section 3 jQuery事件处理基础 on(),off()和one()方法使用

 
  jQuery提供了简单的方法来向选择器(对应页面上的元素)绑定事件处理器(event handlers).
  当一个事件发生,提供的function就被执行,在方法里面,this代表当前的元素.
  这些事件通常是由于用户和页面的交互而被激发,比如文字输入到表单元素,鼠标指针移动等.也有一些情况,比如页面load和unload的事件,是由浏览器本身来激发.
  关于Events的细节,可以查看:http://api.jquery.com/category/events/
  事件处理方法可以接收一个event对象,这个对象被用来判定事件类型,或者制止默认行为等.
  event对象的详细介绍可以参见:http://api.jquery.com/category/events/event-object/
 

jQuery的事件绑定方法

  jQuery为绝大多数浏览器事件提供了方便的方法,比如.click(), .focus(), .blur(), .change()等,它们都是.on()方法的简便形式.
  比如下面两个方法的效果是一样的:
// Event setup using a convenience method
$("p").click(function () {
console.log("You clicked a paragraph!");
});
// Equivalent event setup using the `.on()` method
$("p").on("click", function () {
console.log("click");
});
 

.on()方法

  .on()方法使用起来很灵活,在很多场合很有用,比如为多个事件绑定同一个处理方法,当你想给处理方法传数据,或者处理自定义事件,或当你想要传递多个事件和方法时.
 
  为多个事件绑定同一个处理方法时,用空格分隔事件名:
// Multiple events, same handler
$("input").on(
"click change", // Bind handlers for multiple events
function () {
console.log("An input was clicked or changed!");
}
);
  如果多个事件的处理方法不同,也可以一次绑定,因为.on()方法可以接收传入一个大括号包含的PlainObject对象,其中是一个或多个key value,key是事件名,value是处理函数.
// Binding multiple events with different handlers
$("p").on({
"click": function () {
console.log("clicked!");
},
"mouseover": function () {
console.log("hovered!");
}
});
  但是需要注意的是.on()方法只能对当前存在的元素绑定事件.
  如果在.on()方法执行之后,新建了一个符合选择器的元素,这个新建的元素并不会执行这个前面绑定的事件处理方法.
$(document).ready(function () {

    // Sets up click behavior on all button elements with the alert class
// that exist in the DOM when the instruction was executed
$("button.alert").on("click", function () {
console.log("A button with the alert class was clicked!");
}); // Now create a new button element with the alert class. This button
// was created after the click listeners were applied above, so it
// will not have the same click behavior as its peers
$("<button class='alert'>Alert!</button>").appendTo(document.body);
});

事件对象

  每一个事件处理函数都接收一个事件对象(Event Object),这个对象包含很多属性和方法.
  一个很常用的方法是用.preventDefault()来阻止事件的默认行为.
  其他有用的属性和方法包括:
  pageX, pageY: 事件发生时的鼠标指针位置.相对于页面显示区域的左上角,而不是浏览器窗口.
  type: 事件类型,比如”click”.
  which: 被点击的button或key.
  data: 事件被绑定的时候传入的数据.比如:
// Event setup using the `.on()` method with data
$("input").on(
"change",
{foo: "bar"}, // Associate data with event binding
function (eventObject) {
console.log("An input value has changed! ", eventObject.data.foo);
}
);
  target: 初始化这个事件的DOM元素,也即分发这个事件的元素.
  namespace: 这个事件激发时指定的namespace.
  timeStamp: 事件发生时距离1970年1月1日的时间戳,单位是milliseconds.
 
  preventDefault(): 阻止事件的默认行为.
  stopPropagation(): 阻止事件向上冒泡到其他元素.
  这两个方法一起用的时候,可以用return false来代替,更加简洁.
 
  originalEvent属性是浏览器自己创造的一个event对象,jQuery又包装了一下这个对象,有一些有用的方法和属性,这些在处理移动设备的touch events的时候很有用.
 
  除了事件对象之外,事件处理函数还可以通过this关键字访问该事件绑定的DOM元素,我们可以把这个DOM元素转换为jQuery对象:
var $element = $(this);

解除事件监听器

  要解除event listener,可以使用.off()方法,传入要解除绑定的事件类型.
  如果你附加了一个有名字的function,那么你可以通过第二个参数,指定仅解除这个名字的事件处理函数.
// Tearing down all click handlers on a selection
$("p").off("click"); // Tearing down a particular click handler, using a reference to the function
var foo = function () {
console.log("foo");
};
var bar = function () {
console.log("bar");
}; $("p").on("click", foo).on("click", bar);
$("p").off("click", bar); // foo is still bound to the click event
 
 

设置只执行一次的事件处理

  有时候你需要一个handler只执行一次,或者你想执行一次之后换一个handler, jQuery为这种情况提供了.one()方法.
// Switching handlers using the `.one()` method
$("p").one("click", firstClick); function firstClick() {
console.log("You just clicked this for the first time!"); // Now set up the new handler for subsequent clicks;
// omit this step if no further click responses are needed
$(this).click(function () {
console.log("You have clicked this before!");
});
}
  注意上面这段代码中,这个firstClick方法将在所有p元素第一次被点击的时候执行一次,而不是某个p被点击一次之后就从所有p中移除该方法.
 
  .one()方法也可以用来绑定多个事件:
// Using .one() to bind several events
$("input[id]").one("focus mouseover keydown", firstEvent); function firstEvent(eventObject) {
console.log("A " + eventObject.type + " event occurred for the first time on the input with id " + this.id);
}
  这种情况下,所有事件的第一次执行都会进入这个处理方法.
  对这段代码来说,也即,即便input已经获得了焦点,但是第一次keydown事件的时候还是会执行这个方法.
 
 

参考资料

  jQuery Events: http://learn.jquery.com/events/
  jQuery API Events: http://api.jquery.com/category/events/
 
  w3school jQuery参考手册 事件: http://www.w3school.com.cn/jquery/jquery_ref_events.asp
  JavaScript事件参考手册: http://www.w3school.com.cn/jsref/jsref_events.asp
 

[DOM Event Learning] Section 3 jQuery事件处理基础 on(), off()和one()方法使用的更多相关文章

  1. [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event

    [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event   事件 事件(Event)是用来通知代码,一些有趣的事情发生了. 每一个Event都会被一个E ...

  2. [DOM Event Learning] Section 1 DOM Event 处理器绑定的几种方法

    [DOM Event Learning] Section 1 DOM Event处理器绑定的几种方法   网页中经常需要处理各种事件,通常的做法是绑定listener对事件进行监听,当事件发生后进行一 ...

  3. [DOM Event Learning] Section 4 事件分发和DOM事件流

    [DOM Event Learning] Section 4 事件分发和DOM事件流 事件分发机制: event dispatch mechanism. 事件流(event flow)描述了事件对象在 ...

  4. Jquery学习笔记:事件处理基础介绍

    一.引子 给html的元素添加一个响应事件,最简单的办法是直接在元素标签内填写事件属性,先看一个最简单的例子 <!DOCTYPE html> <html lang="zh- ...

  5. 第一百六十六节,jQuery,基础 DOM 和 CSS 操作,元素内容,元素属性,css和class,元素宽度高度、偏移、滚动条

    jQuery,基础 DOM 和 CSS 操作,元素内容,元素属性,css和class,元素宽度高度.偏移.滚动条 学习要点: 1.DOM 简介 2.设置元素及内容 3.元素属性操作 4.元素样式操作 ...

  6. jQuery基础修炼圣典—DOM篇(二)jQuery遍历

    1.children()方法 jQuery是一个合集对象,如果想快速查找合集里面的第一级子元素,此时可以用children()方法.这里需要注意:.children(selector) 方法是返回匹配 ...

  7. jQuery编程基础精华01(jQuery简介,顶级对象$,jQuery对象、Dom对象,链式编程,选择器)

    jQuery简介 什么是jQuery? jQuery就是一个JavaScript函数库,没什么特别的.(开源)联想SQLHelper类 jQuery能做什么?jQuery是做什么的? jQuery本身 ...

  8. JavaScript 基础(四) - HTML DOM Event

    HTML DOM Event(事件) HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript.下 ...

  9. JavaScript学习 - 基础(七) - DOM event(事件)

    DOM event(事件) 定义事件: // 定义事件: //方式一,直接在标签上定义事件 // 方式二: var a11 = document.getElementsByName('a11')[0] ...

随机推荐

  1. javascript运动系列第七篇——鼠标跟随运动

    × 目录 [1]眼球转动 [2]苹果菜单[3]方向跟随 前面的话 运动除了直线运动和曲线运动两种运动形式外,还有一种运动形式是鼠标跟随运动,而这种跟随运动需要用到三角函数的相关内容或者需要进行比例运算 ...

  2. 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器

    × 目录 [1]焦点状态 [2]哈希状态 [3]动画状态[4]显隐状态 前面的话 过滤选择器的内容非常多,本文介绍过滤选择器的最后一部分——状态选择器 焦点状态 :focus :focus选择器选择当 ...

  3. 爬虫技术 -- 进阶学习(十一)【补充】获取html中meta标签中的content的内容

    上一篇网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp中提及了很多如何快速抓取html中的文本的语句, 但是meta标签中的content内容的抓取,没有提及到! ...

  4. 使用RequireJs和Bootstrap模态框实现表单提交

    下面我将使用requirejs结合模态框实现三五行代码部署表单提交操作. 传统开发思路如下:

  5. 关于 android 的 view.getLeft(), getRight(), getTop(), getBottom() 的一些疑惑(坑)解答

    (原创) 今天在做下滑刷新的时候碰到 view 的四个 get 函数有点特别,具体遇到的问题如下,经反复测试和查找资料,填坑如下: 1,为什么我有时候在使用getLeft(), getRight(), ...

  6. 关于BFC不会被浮动元素遮盖的一些解释

    简介 在清除浮动一文中提到BFC不会被浮动元素遮盖,并没有详细探究表现行为.规范中指出,在同一个BFC内,作为子元素的BFC的border-box不应该覆盖同为子元素的浮动元素的margin-box. ...

  7. GIS项目中数据开源、工具开源、开发开源的解决方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 摆脱免费地图开发包的约束,拒绝商业地图软件的费用,高效.精确.完备是我 ...

  8. 【Python实战】Scrapy豌豆荚应用市场爬虫

    对于给定的大量APP,如何爬取与之对应的(应用市场)分类.描述的信息?且看下面分解. 1. 页面分析 当我们在豌豆荚首页搜索框输入微信后,会跳转到搜索结果的页面,其url为http://www.wan ...

  9. 我理解的this

    this指的就是当前上下文环境对象,主要分两种情况. 1.函数中的this指的是调用该函数的那个上下文环境对象 这个的理解还是非常重要的. 看一个全局函数的例子 var b = 1; function ...

  10. iOS页面间传值的一些方式总结

    废话不多说,直接进入主题: 这里要说的方式有6种:1.属性传值 2.block 3.delegate 4.UserDefault 5.单例 6.通知(篇幅原因我只写核心代码,如果看不懂可以直接在最下面 ...