jQuery绑定事件处理器

绑定事件处理器
主要掌握事件绑定、解绑,事件委托的用法


一、 事件绑定

on()

  • 在选定的元素上绑定一个或多个事件处理函数。

该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,JQ会按照绑定的先后顺序依次执行绑定的事件处理函数。

.on( events [, selector ] [, data ], fn )

  • events:一个或多个用空格分隔的事件类型和可选的命名空间,如”click“或”keydown.myPlugin” 。
  • selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择的null或省略,当它到达选定的元素,事件总是触发。
  • data:当一个事件被触发时要传递event.data给事件处理函数。
  • fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。

.on( events-map[, selector ] [, data ] )

  • events-map:个用字符串表示的,一个或多个空格分隔的事件类型和可选的命名空间,值表示事件绑定的处理函数。
  • selector:一个选择器字符串过滤选定的元素,该选择器的后裔元素将调用处理程序。如果选择是空或被忽略,当它到达选定的元素,事件总是触发。
  • data:当一个事件被触发时要传递event.data给事件处理函数。

二、 事件解绑

“绑定”与“解绑”是相反的关系。在JQ中,我们可以通过 off()方法解除的某一指定的事件或者所有事件。
对同一元素绑定的多个同一事件进行解绑,可以使用命名空间解决,例如“click.a”“click.b”

off()

概述

在选择元素上移除一个或多个事件的事件处理函数。

off() 方法移除用.on()绑定的事件处理程序。有关详细信息,请参阅该网页上delegated和directly绑定事件。特定的事件处理程序可以被移除元素上提供事件的名称,命名空间,选择器,或处理函数名称的组合。当有多个过滤参数,所提供的参数都必须匹配的事件处理程序被删除。

如果一个简单的事件名称,比如提供”click”,所有 这种类型的事件(包括直接和委派)从jQuery设置的元素上删除。当编写代码,将作为一个插件使用,或者干脆当一个大的代码基础工作,最好的做法是安装和取下使用命名空间的事件,从而使代码不会无意中删除其他代码附加事件处理程序。在一个特定的命名空间中的所有类型的所有事件,可以从一个元素中删除,只是提供了一个命名空间,比如 “.myPlugin”。至少,无论是命名空间或事件名称必须提供。

要删除特定的委派事件处理程序,提供一个selector 的参数。选择器字符串必须是完全匹配递到.on()事件处理程序附加的选择器。要删除非委托元素上的所有事件,使用特殊值 “**” 。

处理程序也可以删除handler参数指定名称的函数。当jQuery的绑定一个事件处理程序,它分配一个唯一的ID给处理函数。函数用jQuery.proxy()代理或类似有相同的唯一ID机制(代理函数),因此,通过代理处理程序.off 可能会删除比预期更多的处理程序。在这些情况下,最好是附加和移除事件处理程序,使用命名空间。

和.on()一样,你可以传递一个 events-map>参数明确的指定而不是用events 和 handler作为单独参数。键事件和/或命名空间;值是处理函数或为false的特殊价值。

.off( events [, selector ] [, fn] )

  • events:一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如”click”, “keydown.myPlugin”, 或者 “.myPlugin”.
  • selector:一个最初传递到.on()事件处理程序附加的选择器。
  • fn:事件处理程序函数以前附加事件上,或特殊值false.

.off( events-map [, selector ] )

  • events-map:一个用字符串表示的,一个或多个空格分隔的事件类型和可选的命名空间,值表示先前事件绑定的处理函数。
  • selector:一个最初传递到.on()事件处理程序附加的选择器。

三. 事件委托

通过事件冒泡,让子元素绑定的事件冒泡到父元素(或祖先元素)上,然后再进行处理。
事件委托来处理:直接绑定document,on(事件,需要绑定的元素,额外数据(可选项))


四、 one()

为元素的事件添加处理函数。处理函数在每个元素上每种事件类型最多执行一次。

one(type,[data],fn)

  • type:添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。
  • data:将要传递给事件处理函数的数据映射
  • fn:每当事件触发时执行的函数。

五、 trigger()

根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为

概述

在每一个匹配的元素上触发某类事件。

这个函数也会导致浏览器同名的默认行为的执行。比如,如果用trigger()触发一个’submit’,则同样会导致浏览器提交表单。如果要阻止这种默认行为,应返回false。

你也可以触发由bind()注册的自定义事件而不限于浏览器默认事件。

事件处理函数会收到一个修复的(规范化的)事件对象,但这个对象没有特定浏览器才有的属性,比如keyCode。

jQuery也支持 命名空间事件。这允许你触发或者解除绑定一组特定的事件处理函数,而无需一一个指定。你可以在事件类型后面加上感叹号 ! 来只触发那些没有命名空间的事件处理函数。

jQuery 1.3中新增:

所有触发的事件现在会冒泡到DOM树上了。举例来说,如果你在一个段落p上触发一个事件,他首先会在这个元素上触发,其次到父元素,在到父元素的父元素,直到触发到document对象。这个事件对象有一个 .target 属性指向最开始触发这个事件的元素。你可以用 stopPropagation() 来阻止事件冒泡,或者在事件处理函数中返回false即可。

事件对象构造器现在已经公开,并且你可以自行创建一个事件对象。这个事件对象可以直接传递给trigger所触发的事件处理函数。事件对象的完整属性列表可以在 jQuery.Event 的文档里找到。

你可以有三种方式指定事件类型:

  • 你可以传递字符串型的事件名称(type参数)。

  • 你可以使用jQuery.Event对象。可以将数据放进这个对象,并且这个对象可以被触发的事件处理函数获取到。

  • 最后,你可以传递一个带有数据的字面量对象。他将被复制到真正的jQuery.Event对象上去。 注意在这种情况下你”’必须”’指定一个 type 属性。

trigger(type,[data])

  • type:一个事件对象或者要触发的事件类型
  • data:传递给事件处理函数的附加参数

.trigger( event )

  • event:事件发生时运行的函数

6. triggerHandler()

触发被选元素的指定事件类型。但不会执行浏览器默认动作,也不会产生事件冒泡。

概述

这个特别的方法将会触发指定的事件类型上所有绑定的处理函数。但不会执行浏览器默认动作,也不会产生事件冒泡。

这个方法的行为表现与trigger类似,但有以下主要区别:

  • 第一,他不会触发浏览器默认事件。

  • 第二,只触发jQuery对象集合中第一个元素的事件处理函数。

  • 第三,这个方法的返回的是事件处理函数的返回值,而不是据有可链性的jQuery对象。此外,如果最开始的jQuery对象集合为空,则这个方法返回 undefined 。

  • triggerHandler()创建的事件不会产生事件冒泡

triggerHandler(type, [data])

  • type:要触发的事件类型
  • data:传递给事件处理函数的附加参数

猜你喜欢

转载自blog.csdn.net/weixin_42952665/article/details/82689680