内容
jQuery.widget( name [, base ], prototype )
描述:使用与所有 jQuery UI 小部件相同的抽象,创建有状态的 jQuery 插件。
你可以从头开始创建新小部件,仅使用 $.Widget 对象作为要继承的基础,或者你可以明确继承自现有的 jQuery UI 或第三方小部件。使用与你继承自相同名称定义小部件,甚至允许你扩展小部件。
jQuery UI 包含许多维护状态的小部件,因此与典型 jQuery 插件相比,它们的用法模式略有不同。所有 jQuery UI 的小部件都使用相同模式,由小部件工厂定义。因此,如果你学习如何使用一个小部件,那么你就会知道如何使用所有小部件。
正在寻找有关小部件工厂的教程?查看jQuery 学习中心上的文章。
注意:此文档显示使用进度条小部件的示例,但语法对于每个小部件都是相同的。
初始化
为了跟踪小部件的状态,我们必须为小部件引入一个完整的生命周期。生命周期从初始化小部件时开始。要初始化小部件,我们只需在一个或多个元素上调用插件。
|
1
|
|
这将初始化 jQuery 对象中的每个元素,在本例中为 id 为 "elem" 的元素。
选项
由于 progressbar() 在没有参数的情况下被调用,所以小部件使用其默认选项进行初始化。我们可以在初始化期间传递一组选项来覆盖默认选项
|
1
|
|
我们可以在初始化期间传递任意数量的选项。我们不传递的任何选项都将使用其默认值。
您可以传递多个选项参数。这些参数将合并到一个对象中(类似于 $.extend( true, target, object1, objectN ))。这对于在实例之间共享选项,同时为每个实例覆盖某些属性非常有用
|
1
2
3
|
|
在初始化时传递的所有选项都将进行深度复制,以确保以后可以修改对象而不影响小部件。数组是唯一的例外,它们被引用为原样。此例外是为了支持数据绑定,其中数据源必须保留为引用。
默认值存储在小部件的原型上,因此我们有能力覆盖 jQuery UI 设置的值。例如,在设置以下内容后,所有未来的进度条实例都将默认为 80
|
1
|
|
这些选项是小部件状态的一部分,因此我们也可以在初始化后设置选项。我们稍后将在选项方法中看到这一点。
方法
现在小部件已初始化,我们可以查询其状态或对小部件执行操作。初始化后的所有操作都采用方法调用的形式。要在小部件上调用方法,我们将方法的名称传递给 jQuery 插件。例如,要在我们的进度条小部件上调用 value() 方法,我们将使用
|
1
|
|
如果该方法接受参数,我们可以在方法名称后传递它们。例如,要将参数 40 传递给 value() 方法,我们可以使用
|
1
|
|
与 jQuery 中的其他方法一样,大多数小部件方法都会返回 jQuery 对象以进行链接。
|
1
2
3
|
|
每个小部件都将拥有自己的一组方法,具体取决于小部件提供的功能。但是,所有小部件上都存在一些方法,如下所述。
事件
所有小部件都有与其各种行为相关联的事件,以在状态更改时通知您。对于大多数小部件,当触发事件时,名称会以小部件名称为前缀并变为小写。例如,我们可以绑定到进度条的 change 事件,该事件在每次值更改时都会触发。
|
1
2
3
|
|
每个事件都有一个相应的回调,它作为选项公开。如果需要,我们可以连接到进度条的 change 回调,而不是绑定到 progressbarchange 事件。
|
1
2
3
4
5
|
|
所有小部件都有一个 create 事件,该事件在实例化时触发。
实例
可以使用 instance() 方法从给定元素中检索小部件的实例。
|
1
|
|
如果在未与小部件关联的元素上调用 instance() 方法,则返回 undefined。
|
1
|
|
实例使用 jQuery.data() 存储,其中小部件的全名用作键。因此,:data 选择器还可以确定元素是否绑定了给定小部件。
|
1
2
|
|
与 instance() 不同,即使正在测试的小部件尚未加载,也可以使用 :data。
|
1
2
|
|
您还可以使用 :data 获取给定小部件的所有实例元素的列表。
|
1
|
|
属性
所有小部件都具有以下属性集
-
defaultElement:在不提供元素的情况下构造小部件实例时要使用的元素。例如,由于进度条的
defaultElement是"<div>",因此$.ui.progressbar({ value: 50 })在新创建的<div>上实例化进度条小部件实例。 -
document:包含小部件元素所在
document的 jQuery 对象。如果您需要与 iframe 中的小部件进行交互,这将很有用。 -
element:包含用于实例化小部件的元素的 jQuery 对象。如果您选择多个元素并调用
.myWidget(),则会为每个元素创建一个单独的小部件实例。因此,此属性将始终包含一个元素。 -
namespace:小部件原型存储在全局 jQuery 对象上的位置。例如,
"ui"的namespace表示小部件原型存储在$.ui上。 -
options:包含小部件当前正在使用的选项的对象。在实例化时,用户提供的任何选项都将自动与
$.myNamespace.myWidget.prototype.options中定义的任何默认值合并。用户指定的选项将覆盖默认值。 - uuid:小部件的唯一整数标识符。
- version:小部件的字符串版本。对于 jQuery UI 小部件,这将设置为小部件正在使用的 jQuery UI 版本。小部件开发人员必须在其原型中显式设置此属性。
-
widgetEventPrefix:添加到此小组件触发的事件名称前缀。例如,可拖动小组件 的
widgetEventPrefix为"drag",因此,在创建可拖动小组件时,触发的事件名称为"dragcreate"。默认情况下,小组件的widgetEventPrefix为其名称。注意:此属性已弃用,将在以后的版本中删除。事件名称将更改为 widgetName:eventName(例如"draggable:create")。 -
widgetFullName:包括命名空间在内的小组件全名。对于
$.widget( "myNamespace.myWidget", {} ),widgetFullName将为"myNamespace-myWidget"。 -
widgetName:小组件的名称。对于
$.widget( "myNamespace.myWidget", {} ),widgetName将为"myWidget"。 -
window:包含小组件元素所在
window的 jQuery 对象。如果您需要与 iframe 中的小组件进行交互,此对象非常有用。
基本小组件
说明: 小组件工厂使用基本小组件。
选项
类
{}
除了结构类之外,添加到小组件的其他(主题)类。结构类用作此选项的键,主题类用作值。请参阅 _addClass() 方法,了解如何在自定义小组件中使用此方法。查看各个小组件的文档,了解它们支持哪些类。
此选项的主要动机是将结构类映射到主题类。换句话说,任何以命名空间和窗口小部件为前缀的类,如"ui-progressbar-",都被视为结构类。这些类始终添加到窗口小部件中。与此相反,任何不特定于窗口小部件的类都被视为主题类。这些类可以是 jQuery UI 的 CSS 框架的一部分,但也可以来自其他 CSS 框架或在自定义样式表中定义。
在创建后设置classes选项将覆盖所有默认属性。要仅更改特定值,请使用深度设置器,例如.option( "classes.ui-progressbar-value", null )。
使用指定的classes选项初始化进度条窗口小部件,更改ui-progressbar类的主题
|
1
2
3
4
5
|
|
在初始化后获取或设置classes选项
|
1
2
3
4
5
6
7
8
|
|
disabled
false
true,则禁用窗口小部件。使用指定的disabled选项初始化窗口小部件
|
1
2
3
|
|
在初始化后获取或设置disabled选项
|
1
2
3
4
5
|
|
hide
null
-
布尔值:当设置为
false时,将不使用动画,元素将立即隐藏。当设置为true时,元素将以默认持续时间和默认缓动淡出。 - 数字:元素将以指定的持续时间和默认缓动淡出。
-
字符串:元素将使用指定的效果隐藏。该值可以是内置 jQuery 动画方法的名称,例如
"slideUp",或 jQuery UI 效果 的名称,例如"fold"。在这两种情况下,效果都将使用默认持续时间和默认缓动。 -
对象:如果该值是一个对象,则可以提供
effect、delay、duration和easing属性。如果effect属性包含 jQuery 方法的名称,则将使用该方法;否则,假定它是 jQuery UI 效果的名称。在使用支持其他设置的 jQuery UI 效果时,可以将这些设置包含在对象中,它们将传递给效果。如果省略duration或easing,则将使用默认值。如果省略effect,则将使用"fadeOut"。如果省略delay,则不使用延迟。
使用指定的hide选项初始化窗口小部件
|
1
2
3
|
|
在初始化后获取或设置hide选项
|
1
2
3
4
5
|
|
show
null
-
布尔值:设置为
false时,不使用任何动画,元素将立即显示。设置为true时,元素将以默认持续时间和默认缓动淡入。 - 数字:元素将以指定的持续时间和默认缓动淡入。
-
字符串:元素将使用指定的特效显示。该值可以是内置 jQuery 动画方法的名称,例如
"slideDown",也可以是jQuery UI 效果的名称,例如"fold"。在这两种情况下,效果都将使用默认持续时间和默认缓动。 -
对象:如果该值为对象,则可以提供
effect、delay、duration和easing属性。如果effect属性包含 jQuery 方法的名称,则将使用该方法;否则,将假定它是 jQuery UI 效果的名称。在使用支持附加设置的 jQuery UI 效果时,可以将这些设置包含在对象中,并将它们传递给效果。如果省略duration或easing,则将使用默认值。如果省略effect,则将使用"fadeIn"。如果省略delay,则不使用延迟。
使用指定的show选项初始化小部件
|
1
2
3
|
|
在初始化后获取或设置show选项
|
1
2
3
4
5
|
|
方法
_addClass( [element ], keys [, extra ] )返回:jQuery(仅插件)
这为用户提供了一个挂钩,通过classes选项添加其他类或替换默认样式类。
它还提供了在小部件被销毁时自动移除这些类的功能,只要你同时使用_addClass()、_removeClass()和_toggleClass()即可。这可以极大地简化自定义_destroy()方法的实现。
-
element类型:jQuery要向其添加类的元素。默认为
this.element。 -
键类型:字符串要添加的类,以空格分隔的列表。如果
classes选项 的属性与键匹配,则该值也将被添加。当您只需要
extra参数时,您可以通过指定null来跳过此参数。 -
额外类型:字符串
将 ui-progressbar 类添加到小部件的元素(this.element)中。还将添加通过 classes 选项 为给定类指定的所有其他类。
|
1
|
|
将 demo-popup-header 类添加到指定元素(此处引用 this.popup)。还将添加通过 classes 选项 为给定类指定的所有其他类。此外,它还将始终添加 ui-front 类。
|
1
|
|
将 ui-helper-hidden-accessible 类添加到指定元素。对 keys 参数使用 null 来跳过它。
|
1
|
|
_getCreateOptions()返回:Object
- 此方法不接受任何参数。
使小部件元素的 id 属性可用作选项。
|
1
2
3
|
|
_on( [suppressDisabledCheck ] [, element ], handlers )返回:jQuery(仅插件)
click .foo”。_on()方法提供了直接事件绑定的几个好处
- 在处理程序中维护正确的
this上下文。 - 自动处理已禁用的小组件:如果小组件已禁用或事件发生在具有
ui-state-disabled类的元素上,则不会调用事件处理程序。可以使用suppressDisabledCheck参数覆盖。 - 事件处理程序会自动命名空间并在销毁时清除。
-
suppressDisabledCheck(默认值:
false)类型:布尔值是否绕过禁用检查。 -
element类型:jQuery将事件处理程序绑定到的元素。如果没有提供元素,则
this.element用于非委托事件,小组件元素用于委托事件。 -
handlers类型:Object一个对象,其中键表示事件类型和用于委托的可选选择器,值表示要为该事件调用的处理程序函数。
阻止在小组件元素内单击的所有链接的默认操作。
|
1
2
3
4
5
|
|
_removeClass( [element ], keys [, extra ] )返回:jQuery(仅限插件)
参数与 _addClass() 方法 的参数相同,语义也相同,只是相反。
-
element类型:jQuery要从中移除类的元素。默认为
this.element。 -
键类型:字符串要移除的类,以空格分隔的列表。如果
classes选项 的属性与键匹配,则该值也将被移除。当您只需要
extra参数时,您可以通过指定null来跳过此参数。 -
额外类型:字符串要移除的其他类,出于布局或其他原因而需要。与
keys参数不同,这些类与classes选项 的任何属性无关。
从小组件的元素(this.element)中移除 ui-progressbar 类。还将移除为给定类通过 classes 选项 指定的任何其他类。
|
1
|
|
从指定元素(此处引用 this.popup)中移除 demo-popup-header 类。还将移除为给定类通过 classes 选项 指定的任何其他类。此外,它还将移除 ui-front 类。
|
1
|
|
从指定元素中移除 ui-helper-hidden-accessible 类。对 keys 参数使用 null 以跳过它。
|
1
|
|
_setOption( key, value )返回:jQuery(仅限插件)
_setOptions() 方法中为每个单独的选项调用。小组件状态应根据更改进行更新。
当小组件的 height 或 width 选项更改时,更新小组件的元素。
|
1
2
3
4
5
6
7
8
9
|
|
_setOptions( options )返回:jQuery(仅限插件)
option() 方法,只要调用该方法,就会调用此方法。
如果你可以为多个选项更改延迟处理器密集型更改,那么覆盖此方法将很有用。
-
options类型:Object包含要设置的选项的对象,其中选项的名称作为键,选项值作为值。
如果 height 或 width 选项更改,则调用 resize() 方法。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|
_super( [arg ] [, ... ] )返回:jQuery(仅限插件)
.call()。
-
arg类型:Object传递给父级小部件方法的零到多个参数。
处理 title 选项更新并调用父级小部件的 _setOption() 来更新选项的内部存储。
|
1
2
3
4
5
6
|
|
_superApply( arguments )返回:jQuery(仅限插件)
.apply()。
-
arguments类型:Array传递给父级方法的参数数组。
处理 title 选项更新并调用父级小部件的 _setOption() 来更新选项的内部存储。
|
1
2
3
4
5
6
|
|
_toggleClass( [element ], keys [, extra ], add )返回:jQuery(仅限插件)
参数与 _addClass() 和 _removeClass() 方法相同,但额外添加了布尔参数,用于指定添加或删除类。
与 jQuery 的 .toggleClass() 方法不同,布尔 add 参数始终是必需的。
-
element类型:jQuery要切换类的元素。默认为
this.element。 -
键类型:字符串要切换的类,以空格分隔的列表。如果
classes选项 的属性与某个键匹配,则该值也将被切换。当您只需要
extra参数时,您可以通过指定null来跳过此参数。 -
额外类型:字符串
-
添加类型:布尔值
指示是否添加或删除指定的类,其中布尔值
true表示应添加类,布尔值false表示应删除类。
在小部件元素(this.element)上切换ui-state-disabled类。
|
1
|
|
_trigger( type [, event ] [, data ] )返回:布尔值
名称等于type的选项作为回调被调用。
事件名称是小部件名称和type的小写连接。
注意:提供数据时,必须提供所有三个参数。如果没有要传递的事件,只需传递null。
如果阻止了默认操作,将返回false,否则返回true。当处理程序返回false或调用event.preventDefault()时,会阻止默认操作。
-
类型类型:字符串
type应与回调选项的名称匹配。将自动生成完整的事件类型。 -
事件类型:事件导致此事件发生的原始事件;对于向侦听器提供上下文很有用。
-
数据类型:Object与事件关联的数据哈希。
每当按下某个键时,触发search事件。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
|
instance()返回:对象
检索小部件的实例对象。如果元素没有关联的实例,则返回undefined。
与其他小部件方法不同,instance()在小部件插件加载后可以安全地对任何元素进行调用。
- 此方法不接受任何参数。
option( optionName )返回:对象
获取当前与指定的optionName关联的值。
注意:对于以对象作为其值的对象,你可以使用点符号来获取特定键的值。例如,"foo.bar"将获取foo选项上bar属性的值。
-
optionName类型:字符串要获取的选项的名称。