# delegate.js
**Repository Path**: yaohaixiao/delegate.js
## Basic Information
- **Project Name**: delegate.js
- **Description**: delegate.js - 一个轻量级的 JavaScript 事件委托库。
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-03
- **Last Updated**: 2026-03-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# delegate.js
[](https://www.npmjs.com/package/@yaohaixiao/delegate.js)

[](https://prettier.io)
[](https://codecov.io/gh/yaohaixiao/delegate.js)
[](https://npmcharts.com/compare/@yaohaixiao/delegate.js?minimal=true)
[](https://github.com/yaohaixiao/delegate.js/blob/master/LICENSE)
delegate.js - 一个轻量级的 JavaScript 事件委托库。
## 项目初衷
编写 delegate.js 的主要是为初学 JavaScript 的朋友了解 [JavaScript 中的事件委托](https://juejin.cn/post/7387801635328983049) 实现机制而开发。当然,delegate.js 也可以应用到实际的产品开发中。
## 特点
- 原生 JavaScript 编写,无任何依赖;
- 支持 UMD 规范,同时也提供 ES6 模块调用;
- 支持创建和绑定自定义事件,并且可以手动触发自定义事件;
- 采用 jQuery 链式调用语法,调用语法简洁方便;
- 文件体积小(Gzip:3KB),加载速度快;
## Browsers support
| [
](https://github.com/yaohaixiao/delegate.js/)IE / Edge | [
](https://github.com/yaohaixiao/delegate.js/)Firefox | [
](https://github.com/yaohaixiao/delegate.js/)Chrome | [
](https://github.com/yaohaixiao/delegate.js/)Safari | [
](https://github.com/yaohaixiao/delegate.js/)Opera |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| IE11, Edge | last 10 versions | last 10 versions | last 10 versions | last 10 versions |
## 安装说明
delegate.js 支持 UMD 规范和 ES6 的模块调用方式,可以在 Node.js 环境中使用 npm 安装,也可以在浏览器中使用 script 标签引入到页面。
### npm 安装
```sh
# install from npmjs.com
npm i -S @yaohaixiao/delegate.js
# install from github.com
npm i -S @yaohaixiao/delegate.js --registry=https://npm.pkg.github.com
```
### 浏览器中调用
在浏览器中调用 delegate.js,可以选择调用 jsdelivr 提供的 CDN 服务中的文件,也可以使用本地的 delegate.js 文件。
#### CDN 调用 JS 文件
```html
```
#### 本地调用 JS 文件
```html
```
### Node.js 中调用
```js
const delegate = require('@yaohaixiao/delegate.js')
```
### ES6 模块中调用
```js
// 调用 delegate 实例对象
import delegate from '@yaohaixiao/delegate.js/delegate'
// 或者调用 core 版本
// core 版本仅提供以下几个方法:
// on()
// once()
// off()
// click()
// mouseenter()
// mouseleave()
// change()
// createEvent()
// trigger()
// purge()
// destroy()
import delegate from '@yaohaixiao/delegate.js/delegate.core'
// 调用 Emitter 构造函数
import Emitter from '@yaohaixiao/delegate.js/emitter'
// 或者调用 Emitter Core 版本
import Emitter from '@yaohaixiao/delegate.js/emitter.core'
// 调用单个(on/once/off)方法
import on from '@yaohaixiao/delegate.js/on'
import once from '@yaohaixiao/delegate.js/once'
import off from '@yaohaixiao/delegate.js/off'
```
## API 文档
delegate.js 中封装了:on()、once()、off() 等事件侦听相关的常用方法。delegate.js 的 API 借鉴了 jQuery 的链式调用模式,掉起来非常方便。
## Options
### el
Type: `HTMLElement|String`
Default: ``
必须,要添加事件代理的 DOM 元素或者 DOM 元素的选择器。
```js
// 使用 DOM 节点选择器
delegate('#list')
// 使用 DOM 节点
const $list = document.getElementById('list')
delegate($list)
```
## Properties
### $el
Type: `HTMLElement`
Default: ``
添加事件代理的 DOM 元素。
```js
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.$el // => 获取到 list 列表 DOM 元素
```
## methods
delegate.js 体积虽然小(Gzip 压缩后仅 3KB),却提供了十分丰富的事件代理相关的操作方法:
### at(type, fn[, data, context, once = false])
#### Description
at() 方法用来绑定事件处理器。
#### Parameters
##### type
Type: `String`
Default: ``
(必须)type 用以设置触发的事件类型。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
```js
const handler = function(evt, data) {
console.log('data', data)
// => { user: 'Robert' }
}
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.at('click', handler, { user: 'Robert' })
```
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向:
- 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象;
- 如未指定 context,则事件处理器回调函数的 this 上下文指向为 Emitter 对象;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
```js
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// once 属性为 true,点击事件处理器仅触发一次
$emitter.at('click', handler, true)
// 默认每次点击都会触发执行点击事件处理器
$emitter.at('click', handler)
```
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
### on(selector, type, fn[, data, context, once = false])
#### Description
on() 方法用来绑定事件代理处理器。
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
```js
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('.list')
// 类选择器
$emitter.on('.item', 'click', handler)
// 标签选择择器
$emitter.on('li', 'click', handler)
// 子类选择器
$emitter.on('li > span', 'click', handler)
```
##### type
Type: `String`
Default: ``
(必须)type 用以设置触发的事件类型。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
```js
const handler = function(evt, data) {
console.log('data', data)
// => { user: 'Robert' }
}
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.on('li', 'click', handler, { user: 'Robert' })
```
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向:
- 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象;
- 如未指定 context,则事件处理器回调函数的 this 上下文指向为 Emitter 对象;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
```js
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// once 属性为 true,点击事件处理器仅触发一次
$emitter.on('.item', 'click', handler, true)
// 默认每次点击都会触发执行点击事件处理器
$emitter.on('.item', 'click', handler)
```
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
### once(selector, type, fn[, data, context])
#### Description
once() 方法用来绑定事件代理处理器,仅触发一次。
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
```js
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('.list')
// 类选择器
$emitter.once('.item', 'click', handler)
// 标签选择择器
$emitter.once('li', 'click', handler)
// 子类选择器
$emitter.once('li > span', 'click', handler)
```
##### type
Type: `String`
Default: ``
(必须)type 用以设置触发的事件类型。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
```js
const handler = function(evt, data) {
console.log('data', data)
// => { user: 'Robert' }
}
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.once('li', 'click', handler, { user: 'Robert' })
```
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
### off(type[, fn])
#### Description
off() 方法用来接触绑定的事件代理处理器。
#### Parameters
##### type
Type: `String`
Default: ``
(可选)type 指定需要接触绑定的事件类型,不指定则解绑 $el 上绑定的所有事件处理器。
```js
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const callback = function(evt) {
const $li = evt.delegateTarget
console.log(`你双击的 li 节点的 id 为 ${$li.id}`)
}
const fn = function(evt) {
const $li = evt.delegateTarget
console.log(`你鼠标划过的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// 绑定了
$emitter.on('.item', 'click', handler)
$emitter.on('.item', 'click', fn)
$emitter.on('.item', 'dbclick', callback)
$emitter.on('.item', 'mouserenter', fn)
// 解除 click 事件绑定的 handler 事件处理器
$emitter.off($list, 'click', callback)
// 解除 #list 绑定的所有事件处理器
$emitter.off($list)
```
##### fn
Type: `Function`
Default: ``
(可选)fn 指定需要接触绑定的事件处理器回调函数,如果不指定则接触 $el 绑定的所有指定 type 的事件处理器。
```js
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const callback = function(evt) {
const $li = evt.delegateTarget
console.log(`你双击的 li 节点的 id 为 ${$li.id}`)
}
const fn = function(evt) {
const $li = evt.delegateTarget
console.log(`你鼠标划过的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// 绑定了
$emitter.on('.item', 'click', handler)
$emitter.on('.item', 'click', fn)
$emitter.on('.item', 'click', callback)
// 解除 click 事件绑定的 handler 事件处理器
$emitter.off($list, 'click', callback)
// 解除所有 click 事件处理器
$emitter.off($list, 'click')
```
### click(selector, fn[, data, context, once = false])
#### Description
绑定 click 代理事件,其调用方法和 on() 类似。
#### Since
1.4.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 click 代理事件
$emitter.click('.item', handler)
```
### dbclick(selector, fn[, data, context, once = false])
#### Description
绑定 dbclick 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 click 代理事件
$emitter.dbclick('.item', handler)
```
### mouseenter(selector, fn[, data, context, once = false])
#### Description
绑定 mouseenter 代理事件。
#### Since
1.4.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.relatedTarget
console.log(`当前事件的 relatedTarget 是:${$target}`)
}
const $emitter = delegate('#list')
// 类选择器
$emitter.mouseenter('.item', handler)
```
### mouseleave(selector, fn[, data, context, once = false])
#### Description
绑定 mouseleave 代理事件。
#### Since
1.4.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.relatedTarget
console.log(`当前事件的 relatedTarget 是:${$target}`)
}
const $emitter = delegate('#list')
// 类选择器
$emitter.mouseleave('.item', handler)
```
### mousedown(selector, fn[, data, context, once = false])
#### Description
绑定 mousedown 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mousedown 代理事件
$emitter.mousedown('.item', handler)
```
### mouseup(selector, fn[, data, context, once = false])
#### Description
绑定 mouseup 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mouseup 代理事件
$emitter.mouseup('.item', handler)
```
### mouseover(selector, fn[, data, context, once = false])
#### Description
绑定 mouseover 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mouseover 代理事件
$emitter.mouseover('.item', handler)
```
### mousemove(selector, fn[, data, context, once = false])
#### Description
绑定 mousemove 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mousemove 代理事件
$emitter.mousemove('.item', handler)
```
### mouseout(selector, fn[, data, context, once = false])
#### Description
绑定 mouseout 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mouseout 代理事件
$emitter.mouseout('.item', handler)
```
### drag(selector, fn[, data, context, once = false])
#### Description
绑定 drag 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 drag 代理事件
$emitter.drag('.item', handler)
```
### dragend(selector, fn[, data, context, once = false])
#### Description
绑定 dragend 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragend 代理事件
$emitter.dragend('.item', handler)
```
### dragenter(selector, fn[, data, context, once = false])
#### Description
绑定 dragenter 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragenter 代理事件
$emitter.dragenter('.item', handler)
```
### dragleave(selector, fn[, data, context, once = false])
#### Description
绑定 dragleave 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragleave 代理事件
$emitter.dragleave('.item', handler)
```
### dragover(selector, fn[, data, context, once = false])
#### Description
绑定 dragover 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragover 代理事件
$emitter.dragover('.item', handler)
```
### dragstart(selector, fn[, data, context, once = false])
#### Description
绑定 dragstart 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragstart 代理事件
$emitter.dragstart('.item', handler)
```
### drop(selector, fn[, data, context, once = false])
#### Description
绑定 drop 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 drop 代理事件
$emitter.drop('.item', handler)
```
### wheel(selector, fn[, data, context, once = false])
#### Description
绑定 wheel 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 wheel 代理事件
$emitter.wheel('.item', handler)
```
### contextmenu(selector, fn[, data, context, once = false])
#### Description
绑定 contextmenu 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 contextmenu 代理事件
$emitter.contextmenu('.item', handler)
```
### focusin(selector, fn[, data, context, once = false])
#### Description
focusin() 方法用来绑定 focusin(IE) 或者 focus(其它) 代理事件处理器,调用方法和 on() 一致。并且会根据浏览器自动添加事件类型。具体调用方法请参考 on() 方法。
#### Since
1.4.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $input = evt.delegateTarget
console.log(`输入框当前值为:${$input.value}`)
}
const $emitter = delegate('.options-input')
// 类选择器
$emitter.focusin('.options-input__inner', handler)
```
### focusout(selector, fn[, data, context, once = false])
#### Description
focusout() 方法用来绑定 focusout(IE) 或者 blur(其它) 代理事件处理器,调用方法和 on() 一致。并且会根据浏览器自动添加事件类型。具体调用方法请参考 on() 方法。
#### Since
1.4.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $input = evt.delegateTarget
console.log(`输入框当前值为:${$input.value}`)
}
const $emitter = delegate('.options-input')
// 类选择器
$emitter.focusout('.options-input__inner', handler)
```
### change(selector, fn[, data, context, once = false])
#### Description
绑定 change 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 change 代理事件
$emitter.change('.input', handler)
```
### input(selector, fn[, data, context, once = false])
#### Description
绑定 input 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 input 代理事件
$emitter.input('.input', handler)
```
### compositionstart(selector, fn[, data, context, once = false])
#### Description
绑定 compositionstart 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 compositionstart 代理事件
$emitter.compositionstart('.input', handler)
```
### compositionupdate(selector, fn[, data, context, once = false])
#### Description
绑定 compositionupdate 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 contextmenu 代理事件
$emitter.compositionupdate('.input', handler)
```
### compositionend(selector, fn[, data, context, once = false])
#### Description
绑定 compositionend 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 compositionend 代理事件
$emitter.compositionend('.input', handler)
```
### paste(selector, fn[, data, context, once = false])
#### Description
绑定 paste 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 paste 代理事件
$emitter.paste('.input', handler)
```
### copy(selector, fn[, data, context, once = false])
#### Description
绑定 copy 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 copy 代理事件
$emitter.copy('.item', handler)
```
### cut(selector, fn[, data, context, once = false])
#### Description
绑定 cut 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 cut 代理事件
$emitter.cut('.textarea', handler)
```
### keydown(selector, fn[, data, context, once = false])
#### Description
绑定 keydown 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 keydown 代理事件
$emitter.keydown('.input', handler)
```
### keyup(selector, fn[, data, context, once = false])
#### Description
绑定 keyup 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 keyup 代理事件
$emitter.keyup('.input', handler)
```
### error(selector, fn[, data, context, once = false])
#### Description
绑定 error 代理事件。
#### Since
1.7.0
#### Parameters
##### selector
Type: `String`
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
##### fn
Type: `Function`
Default: ``
(必须)fn 为事件处理器回调函数。
##### data
Type: `Object`
Default: ``
(可选)给事件处理器回调函数传递的数据。
##### context
Type: `Object|Boolean`
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
##### once
Type: `Boolean`
Default: `false`
(可选)once 指定事件处理器回调函数是否仅执行一次。
#### Returns
Type: `Emitter`
返回 Emitter 对象(实例)。
```js
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#albums')
// 绑定 error 代理事件
$emitter.error('.image', handler)
```
### createEvent(type[, detail = null, bubbles = true, cancelable = true])
#### Description
创建自定义事件(CustomerEvent)。
#### Since
1.8.0
#### Parameters
##### type
Type: `String`
Default: ``
(必须)事件类型(名称)。
##### detail
Type: `Object`
Default: `null`
(可选)传递给自定义事件的数据,默认为 null。
##### bubbles
Type: `Boolean`
Default: `true`
(可选)是否支持冒泡,默认为 true。
##### cancelable
Type: `Boolean`
Default: `true`
(可选)是否可以取消,默认为 true。
#### Returns
Type: `CustomerEvent`
CustomerEvent 实例。
```html