博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

jquery事件处理bind,多个事件

Posted on 2011-03-10 17:03  itcfj  阅读(3460)  评论(0编辑  收藏  举报

[Jquery] jquery事件处理bind(type, [data], fn)

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()最基本的用法是:
  1. $('#foo').bind('click', function() {
  2. alert('User clicked on "foo."');
  3. });
复制代码
这个代码能使ID为foo的元素响应click事件。当用户点击元素内部之后,就会弹出一个警

告框。

多个事件

依次可以绑定多个事件类型,每个事件类型用空格分隔:
  1. $('#foo').bind('mouseenter mouseleave', function() {
  2.   $(this).toggleClass('entered');
  3. });
复制代码
这个代码让一个<div id="foo">元素(初始情况下class没有设置成entered),当鼠标

移进去的时候,在class中加上entered,而当鼠标移出这个div的时候,则去除这个

class值。

在jQuery 1.4中,我们也可以通过传入一个映射对来一次绑定多个事件处理函数:
  1. $('#foo').bind({
  2. click: function() {
  3. // do something on click
  4. },
  5. mouseenter: function() {
  6. // do something on mouseenter
  7. }
  8. });
复制代码
事件处理函数

fn这个参数接受一个回调函数,就像先前展示的那样。在这个事件处理函数内部,this指

向这个函数绑定的DOM元素。如果要让这个元素变成jQuery对象来使用jQuery的方

法,可以把这个对象传入 $() 重新封装。比如说:
  1. $('#foo').bind('click', function() {
  2.   alert($(this).text());
  3. });
复制代码
这个代码执行之后,当用户点击了ID为foo的元素内部之后,他的文本内容就会出现在一

个警告框中。

事件对象

fn这个参数的回调函数还可以接受一个参数。当这个函数被调用时,一个JavaScript事

件对象会作为一个参数传进来。

这个事件对象通常是没有必要且可以省略的参数,因为当这个事件处理函数绑定的时候

就能够明确知道他在触发的时候应该做些什么,通常就已经可以获得充分的信息了。然

而在有些时候,在事件初始化的时候需要获取更多关于用户环境的信息。可以参考完整

的关于事件对象的内容(英文)。

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

和.stopPropagation()。

可以像这样在事件处理函数内使用事件对象:
  1. $(document).ready(function() {
  2. $('#foo').bind('click', function(event) {
  3. alert('The mouse cursor is at ('
  4. + event.pageX + ', ' + event.pageY + ')');
  5. });
  6. });
复制代码
注意,这个参数添加到了一个匿名函数上。这个代码可以让用户在点击ID为foo的元素

时,报告鼠标点击时相对于页面的坐标。

传递事件数据

可选的第二个参数data通常用的很少。如果提供了这个参数,那么我们就能把一些附加

信息传递给事件处理函数了。这个参数有个很好的用处,就是处理闭包带来的问题。比

如我们有两个事件处理函数要指向同一个内部变量:
  1. var message = 'Spoon!';
  2. $('#foo').bind('click', function() {
  3. alert(message);
  4. });
  5. message = 'Not in the face!';
  6. $('#bar').bind('click', function() {
  7. alert(message);
  8. });
复制代码
由于这两个函数在他们各自的环境中都有message,所以触发时显示的消息都是 Not

in the face! 。变量值被改变了。为了回避这个问题,我们可以把message变量作为

data参数传递进去:
  1. var message = 'Spoon!';
  2. $('#foo').bind('click', {msg: message}, function(event) {
  3.   alert(event.data.msg);
  4. });
  5. message = 'Not in the face!';
  6. $('#bar').bind('click', {msg: message}, function(event) {
  7.   alert(event.data.msg);
  8. });
复制代码
这时在函数内部不再直接指向这个变量了;取而代之的是按值传递给了data参数,他能

保持绑定事件时的值。第一个函数现在会显示Spoon!,而第二个则显示Not in the

face!

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

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

时候传递数据。

在jQuery 1.4中,不再支持把数据以及事件附加到一个object、embed或者applet元

素上面。因为当往Java applet元素上附加数据时,会触发一个严重错误警告。

参数
type:string  

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

data (可选)bject

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

fn:Function

绑定到每个匹配元素的事件上面的处理函数
Axure线上培训
示例
描述:当每个段落被点击的时候,弹出其文本。
  1. $("p").bind("click", function(){
  2.   alert( $(this).text() );
  3. });
复制代码
描述:你可以在事件处理之前传递一些附加的数据。
  1. function handler(event) {
  2.   alert(event.data.foo);
  3. }
  4. $("p").bind("click", {foo: "bar"}, handler)
复制代码
描述:通过返回false来取消默认的行为并阻止事件起泡。
  1. $("form").bind("submit", function() { return false; })
复制代码
描述:通过使用 preventDefault() 方法只取消默认的行为。
  1. $("form").bind("submit", function(event){
  2.   event.preventDefault();
  3. });
复制代码
描述:通过使用 stopPropagation() 方法只阻止一个事件起泡。
  1. $("form").bind("submit", function(event){
  2.   event.stopPropagation();
  3. });
复制代码