转自:http://www.zhufengpeixun.cn/jquery/bind_type_data_fn.html

bind(type, [data], fn)  返回值::jQuery

概述

为每个匹配元素的特定事件绑定事件处理函数。

.bind() 方法是用于往文档上附加行为的主要方式。所有JavaScript事件对象,比如focus, mouseover, 和 resize,都是可以作为type参数传递进来的。

jQuery还提供了一些绑定这些标准事件类型的简单方式,比如.click()用于简化.bind('click')。一共有以下这些:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error 。

任何作为type参数的字符串都是合法的;如果一个字符串不是原生的JavaScript事件名,那么这个事件处理函数会绑定到一个自定义事件上。这些自定义事件绝对不会由浏览器触发,但可以通过使用.trigger()或者.triggerHandler()在其他代码中手动触发。

如果type参数的字符串中包含一个点(.)字符,那么这个事件就看做是有命名空间的了。这个点字符就用来分隔事件和他的命名空间。举例来说,如果执行 .bind('click.name', handler) ,那么字符串中的 click 是事件类型,而字符串 name 就是命名空间。命名空间允许我们取消绑定或者触发一些特定类型的事件,而不用触发别的事件。参考unbind()来获取更多信息。

当一个事件传到一个元素上,所有绑定在上面的针对哪个事件的处理函数都会触发。如果注册了多个事件处理函数,总是按照绑定的顺序依次触发。当所有绑定的事件处理函数执行完毕后,事件继续沿着普通的事件冒泡途径上浮。

.bind()最基本的用法是:

$('#foo').bind('click', function() {
alert('User clicked on "foo."');
});

这个代码能使ID为foo的元素响应click事件。当用户点击元素内部之后,就会弹出一个警告框。

多个事件

依次可以绑定多个事件类型,每个事件类型用空格分隔:

$('#foo').bind('mouseenter mouseleave', function() {
$(this).toggleClass('entered');
});

这个代码让一个<div id="foo">元素(初始情况下class没有设置成entered),当鼠标移进去的时候,在class中加上entered,而当鼠标移出这个div的时候,则去除这个class值。

在jQuery 1.4中,我们也可以通过传入一个映射对来一次绑定多个事件处理函数:

$('#foo').bind({
click: function() {
// do something on click
},
mouseenter: function() {
// do something on mouseenter
}
});

事件处理函数

fn这个参数接受一个回调函数,就像先前展示的那样。在这个事件处理函数内部,this指向这个函数绑定的DOM元素。如果要让这个元素变成jQuery对象来使用jQuery的方法,可以把这个对象传入 $() 重新封装。比如说:

$('#foo').bind('click', function() {
alert($(this).text());
});

这个代码执行之后,当用户点击了ID为foo的元素内部之后,他的文本内容就会出现在一个警告框中。

事件对象

fn这个参数的回调函数还可以接受一个参数。当这个函数被调用时,一个JavaScript事件对象会作为一个参数传进来。

这个事件对象通常是没有必要且可以省略的参数,因为当这个事件处理函数绑定的时候就能够明确知道他在触发的时候应该做些什么,通常就已经可以获得充分的信息了。然而在有些时候,在事件初始化的时候需要获取更多关于用户环境的信息。可以参考完整的关于事件对象的内容(英文)。

在事件处理函数内返回false就等价于执行事件对象上的.preventDefault()和.stopPropagation()。

可以像这样在事件处理函数内使用事件对象:

$(document).ready(function() {
$('#foo').bind('click', function(event) {
alert('The mouse cursor is at ('
+ event.pageX + ', ' + event.pageY + ')');
});
});

注意,这个参数添加到了一个匿名函数上。这个代码可以让用户在点击ID为foo的元素时,报告鼠标点击时相对于页面的坐标。

传递事件数据

可选的第二个参数data通常用的很少。如果提供了这个参数,那么我们就能把一些附加信息传递给事件处理函数了。这个参数有个很好的用处,就是处理闭包带来的问题。比如我们有两个事件处理函数要指向同一个内部变量:

var message = 'Spoon!';
$('#foo').bind('click', function() {
alert(message);
});
message = 'Not in the face!';
$('#bar').bind('click', function() {
alert(message);
});

由于这两个函数在他们各自的环境中都有message,所以触发时显示的消息都是 Not in the face! 。变量值被改变了。为了回避这个问题,我们可以把message变量作为data参数传递进去:

var message = 'Spoon!';
$('#foo').bind('click', {msg: message}, function(event) {
alert(event.data.msg);
});
message = 'Not in the face!';
$('#bar').bind('click', {msg: message}, function(event) {
alert(event.data.msg);
});

这时在函数内部不再直接指向这个变量了;取而代之的是按值传递给了data参数,他能保持绑定事件时的值。第一个函数现在会显示Spoon!,而第二个则显示Not in the face!

注意,如果这个对象按引用传递给了函数,那么将会使情况变得极其复杂。

另外,可以参考.trigger()方法来了解如何在事件触发时传递数据,而不是在事件绑定的时候传递数据。

在jQuery 1.4中,不再支持把数据以及事件附加到一个object、embed或者applet元素上面。因为当往Java applet元素上附加数据时,会触发一个严重错误警告。

参数

typeString

含有一个或多个事件类型的字符串,比如"click"或"submit",还可以是自定义事件名。

data (可选)Object

作为event.data属性值传递给事件对象的额外数据对象

fnFunction

绑定到每个匹配元素的事件上面的处理函数

示例

描述:

当每个段落被点击的时候,弹出其文本。

jQuery 代码:
$("p").bind("click", function(){
alert( $(this).text() );
});

描述:

你可以在事件处理之前传递一些附加的数据。

jQuery 代码:
function handler(event) {
alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler)

描述:

通过返回false来取消默认的行为并阻止事件起泡。

jQuery 代码:
$("form").bind("submit", function() { return false; })

描述:

通过使用 preventDefault() 方法只取消默认的行为。

jQuery 代码:
$("form").bind("submit", function(event){
event.preventDefault();
});

描述:

通过使用 stopPropagation() 方法只阻止一个事件起泡。

jQuery 代码:
$("form").bind("submit", function(event){
event.stopPropagation();
});

jquery方法详解--bind(type, [data], fn)的更多相关文章

  1. jquery方法详解

    jquery方法详解 http://www.365mini.com/doc

  2. jQuery:详解jQuery中的事件(一)

    之前用过一些jQuery的动画和特效,但是用到的部分也不超过10%的样子,感觉好浪费啊——当然浪费的不是jQuery,而是Web资源.后来就想深入研究下jQuery的内部机理,读过两遍jQuery源代 ...

  3. $.ajax()方法详解 jquery

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  4. jQuery中 $.ajax()方法详解

    $.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...

  5. jQuery插件制作方法详解

        jQuery插件制作方法详解   jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加 上Jtip,并引入jtip.js及其样式即可以了. ...

  6. jQuery 源码分析(十七) 事件系统模块 实例方法和便捷方法 详解

    实例方法和便捷方法是指jQuery可以直接通过链接操作的方法,是通过调用$.event上的方法(上一节介绍的底层方法)来实现的,常用的如下: on(types,selector,data,fn,one ...

  7. jQuery - Ajax ajax方法详解

    $.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...

  8. Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解

    Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...

  9. jQuery.validator 详解二

    前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...

随机推荐

  1. html-----013----实体字符/HTML URL 编码

    <!DOCTYPE> 声明 版本 年份 HTML 1991 HTML+ 1993 HTML 2.0 1995 HTML 3.2 1997 HTML 4.01 1999 XHTML 1.0 ...

  2. angularjs开发遇到的坑

    1.用ng-model绑定的输入input标签不能序列化$("form").serialize();要在value赋值才行. 2.disabled 是不能被序列化提交的(这不属于n ...

  3. java web-----DAO设计模式(数据库访问)

    一,DAO设计模式用于 j2ee 的数据层访问,包括五部分, 数据库连接类(包含数据库的连接与关闭操作的一个类), VO类(私有变量与数据库表格对应,接收数据库中表格各字段内容), DAO接口类(包含 ...

  4. 模板:优先队列(priority_queue)

    #include <iostream> #include <cstdio> #include <queue> #include <vector> usi ...

  5. CentOS 6.4 64位 安装 jdk 6u45

    准备: 1.下载历史版本jdk 地址: http://java.sun.com/products/archive/ 下载的版本 jdk-6u45-linux-x64-rpm.bin  Linux x6 ...

  6. mysql复制表数据或表结构到新表中

    MySQL复制表数据到新表的几个步骤. 1.MySQL复制表结构及数据到新表 CREATE TABLE new_table SELECT * FROM old_table; 2.只复制表结构到新表 C ...

  7. php练习4——排序,查找

    排序(从小到大) 查找 注:二分法查找的数组默认为已经排序的数组

  8. MySQL修改时区的方法小结

    这篇文章主要介绍了MySQL修改时区的方法,总结分析了三种常见的MySQL时区修改技巧,包括命令行模式.配置文件方式及代码方式,需要的朋友可以参考下 方法一:通过mysql命令行模式下动态修改 1.1 ...

  9. 根据日期自增的sql语句

    Insert into wd_orderitem (count , id_dish , state , info , sn , id_order)values(1 , 1000000001 , 3 , ...

  10. 坑爹的NSIS转义符:$ (在NSIS的MessageBox中写换行文字)

    最近的项目中,发现了NSIS一个比较坑的地方:$ 不但是变量常量的开头,还是一个转义字符. 大家有没有发现,NSIS写的脚本中,如果要让弹出消息框中的文字带换行功能,“\r\n” 是不是很不管用呢? ...