函数 | 说明 |
---|---|
callbacks.add() | 用于向回调列表中添加一个回调或回调的集合 |
callbacks.disable() | 禁用回调函数列表中的回调 |
callbacks.disabled() | 用于确定回调列表是否已被禁用。 |
callbacks.empty() | 用于从列表中删除所有的回调。 |
callbacks.fire() | 用于传入指定的参数调用所有的回调。 |
callbacks.fired() | 确定回调是否至少已经调用一次。 |
callbacks.fireWith() | 用于函数给定上下文和参数来访问列表中的所有回调。 |
callbacks.has() | 用于判断回调列表中是否添加过某回调函数。 |
callbacks.lock() | 用于锁定当前状态的回调列表。 |
callbacks.locked() | 用于判断回调列表是否已被锁定。 |
$.Callbacks() | 一个多用途的回调列表对象,提供了强大的的方式来管理回调函数列表。 |
回调方法禁用、锁定等后没有解除禁用、锁定的方法
添加函数到回调函数列表
jQuery1.7新增该函数
参数 | 说明 |
---|---|
callbacks | Function/Array类型 一个函数,或者一个函数数组,用来添加到回调列表 |
callbacks.add()方法返回绑定它的那个回调列表对象(this).
jQuery示例代码
var foo = function( value ) {
alert( "foo: " + value );
};
// 另一个函数将被添加到列表
var bar = function( value ){
alert( "bar: " + value );
};
var callbacks = $.Callbacks();
callbacks.add( foo ); // 添加函数 "foo" 到列表
// 传入参数调用所有回调列表函数
callbacks.fire( "hello" );// 输出: "foo: hello"
callbacks.add( bar ); // 添加函数 "bar" 到列表
// 传入参数调用所有回调列表函数
callbacks.fire( "world" );
// 输出:
// "foo: world"
// "bar: world"
禁用回调列表中的回调函数
jQuery1.7新增该函数
callbacks.disable()方法返回一个绑定回调列表的回调对象。
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" );//fn1:foo!
callbacks.disable();
callbacks.fire( "bar!" );//无输出
用于确定回调列表是否已被禁用
jQuery1.7新增该函数
callbacks.disabled()方法返回一个boolean类型,表明回调列表是否被禁用。
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" );//fn1:foo!
callbacks.disable();
var result=callbacks.disabled();
console.log(result)//true
callbacks.fire( "bar!" );//无输出
用于从列表中删除所有的回调函数。
jQuery1.7新增该函数
callbacks.empty()方法返回一个绑定回调列表的回调对象
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
function fn3( value ) {
fn1("fn3 says: " + value);
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.add( fn2 );
callbacks.add( fn3 );
callbacks.fire( "foo!" );
/*
输出:
fn1:foo!
fn1:fn2 says: foo!
fn1:fn3 says: foo!
*/
callbacks.empty();
callbacks.fire( "bar!" );//无输出
callbacks.fire() 函数用于传入指定的参数调用所有的回调列表中的回调函数。
jQuery1.7新增该函数
参数 | 说明 |
---|---|
arguments | 任意类型 传回给回调列表的参数或参数列表 |
callbacks.fire()方法返回一个绑定回调列表的回调对象
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" );//fn1:foo!
用于确定回调是否至少已经调用一次。
jQuery1.7新增该函数
callbacks.fired()方法返回一个Boolean类型,表明回调列表是否至少已经调用一次。
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
console.log(callbacks.fired() );//false
callbacks.fire( "foo!" );//fn1:foo!
console.log(callbacks.fired() );//true
callbacks.fireWith() 函数给定上下文和参数来访问列表中的所有回调函数。
jQuery1.7新增该函数
参数 | 说明 |
---|---|
context | 任意类型 该回调列表中被触发的上下文的一个引用 |
args | 任意类型 传回给回调列表的参数或参数列表 |
context:具体引用的作用是什么?下次调用context时直接触发fireWith设置的回调函数?
callbacks.fireWith()方法返回一个绑定回调列表的回调对象
jQuery示例代码
function fn1( value1,value2 ) {
console.log("fn1:"+ value1+"fn1:"+value2 );
return false;
}
var callbacks = $.Callbacks();
callbacks.fireWith(window,["foo!","bar!"] );//fn1:foo!fn1:bar!
callbacks.has() 函数用于判断回调列表中是否添加过某回调函数。
jQuery1.7新增该函数
参数 | 说明 |
---|---|
callbacks | Function类型 用来查找的回调函数 |
callbacks.has()方法返回一个Boolean类型,判断指定的回调函数是否在回调列表中
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
function fn3( value ) {
fn1("fn3 says: " + value);
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.add( fn2 );
//参数只能有一个,当多个时只判断第一个
console.log(callbacks.has(fn1));//true
console.log(callbacks.has(fn1,fn3));//true
console.log(callbacks.has(fn3,fn1));//false
callbacks.lock() 函数用于锁定当前状态的回调列表。
注意:
1. 如果回调对象被创建,用”memory”标志作为它的参数,绑定函数可能会在回调列表中被锁定后增加并且触发
。
2. 此方法返回一个绑定回调列表的回调对象。
jQuery1.7新增该函数
callbacks.lock()方法返回一个绑定回调列表的回调对象。
jQuery示例代码:
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire("foo!")//fn1:foo!
callbacks.lock()
callbacks.fire("foo!")
使用"memory作为参数创建回调对象
,jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
function fn3( value ) {
fn1("fn3 says: " + value);
return false;
}
//callbacks将添加到这个列表的后面的最新的值立即执行调用任何回调
var callbacks = $.Callbacks("memory" );
callbacks.add( fn1 );
//第一次执行
callbacks.fire( "foo!" );//fn1:foo!
callbacks.lock();
//若之前存在回掉列表调用即.fire(),立即执行最新添加的函数fn2,沿用上一次调用的参数
//若之前不存在回调函数调用即.fire(),则最新添加函数fn2也不发生调用
callbacks.add( fn2 );//fn1:fn2 says: foo!
callbacks.fire( "bar!" );
callbacks.add( fn3 );//fn1:fn3 says: foo!
callbacks.locked() 函数用于判断回调列表是否已被锁定。
jQuery1.7新增该函数
callbacks.locked()方法返回一个boolean类型,表明回调列表是否已被锁定。
jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
var result=callbacks.locked();
console.log(result)//false
callbacks.lock();
result=callbacks.locked();
console.log(result)//true
callbacks.remove(callbacks ) 函数用于从回调列表中的删除一个回调或回调集合。
jQuery1.7新增该函数
参数 | 说明 |
---|---|
callbacks | Function/Array类型 要从回调列表中删除的一个函数或函数数组 |
callbacks 可以直接是多个函数列表(fn1,fn2,fn3)–callbacks.remove(fn1,fn2,fn3)
callbacks.remove()方法返回一个绑定回调列表的回调对象
删除一个回调函数或批量删除方式,jQuery示例代码
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
function fn3( value ) {
fn1("fn3 says: " + value);
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.add( fn2 );
callbacks.add( fn3 );
callbacks.fire( "foo!" );
/*
输出:fn1:foo!
fn1:fn2 says: foo!
fn1:fn3 says: foo!
*/
callbacks.remove(fn2);
callbacks.fire( "bar!" );
/*
输出:fn1:bar!
fn1:fn3 says: bar!
*/
var array=[];
array[array.length]=fn1;
array[array.length]=fn3;
//callbacks.remove(array);该方式不起作用
//批量删除方式
allbacks.remove(fn1,fn3);
callbacks.fire( "footbar!" );//无输出
一个多用途的回调列表对象,提供了强大的的方式来管理回调函数列表。
$.Callbacks()
的内部提供了jQuery的$.ajax()
和 $.Deferred()
基本功能组件。它可以用来作为类似基础定义的新组件的功能。
$.Callbacks()
支持的方法,包括 callbacks.add(),callbacks.remove(), callbacks.fire() and callbacks.disable().
jQuery 1.7新增
参数 | 说明 |
---|---|
flags | 可选String类型 一个用空格标记分隔的标志可选列表,用来改变回调列表中的行为。 |
flags可能的值:
once
: 确保这个回调列表只执行( .fire() )一次(像一个递延 Deferred).memory
: 若之前调用过
回调列表,添加新的回调函数,使用之前的参数
立即执行最新添加到这个列表的回调函数 (像一个递延 Deferred).unique
: 确保回调列表中一个回调函数只能添加一次(所以在列表中没有重复的回调).stopOnFalse
: 当一个回调返回false 时中断调用默认情况下,回调列表将像事件的回调列表可以多次触发。
flags空格标记分隔的取值是使用的$.Callbacks()
内部的.done() 和 .fail()一个递延容器-它们都使用 $.Callbacks('memory once').
flags的代码实例说明,请转示例&说明 查看。
$.Callbacks()函数的返回值是Callbacks类型,返回该Callbacks对象封装的回调列表。
callbacks .add() 支持添加新的回调回调列表, 而callbacks.fire() 提供了一种用于处理在同一列表中的回调方法的途径.
相关的jQuery示例代码:
function fn1( value ) {
console.log("fn1:"+ value );
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" );//fn1:foo!
callbacks.add( fn2 );
callbacks.fire( "bar!" );
/* 输出
fn1:bar!
fn1:fn2 says: bar!
*/
.remove(),用于从回调列表中删除一个特定的回调。下面是.remove() 使用的一个例子:
function fn1( value ) {
console.log("fn1:"+ value );
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" );//fn1:foo!
callbacks.add( fn2 );
callbacks.fire( "bar!" );
/* 输出
fn1:bar!
fn1:fn2 says: bar!
*/
callbacks.remove( fn2 );
callbacks.fire( "foobar" );//fn1:foobar
$.Callbacks( “once” )示例说明:
function fn1( value ) {
console.log("fn1:"+ value );
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
//callbacks执行一次后就不在执行
var callbacks = $.Callbacks("once" );
callbacks.add( fn1 );
//第一次执行
callbacks.fire( "foo!" );//fn1:foo!
//之后的回调函数都不再执行
callbacks.add( fn2 );
callbacks.fire( "bar!" );
callbacks.remove( fn2 );
callbacks.fire( "foobar" );
$.Callbacks( “memory” )示例说明:
function fn1( value ) {
console.log("fn1:"+ value );
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
function fn3( value ) {
fn1("fn3 says: " + value);
return false;
}
//callbacks将添加到这个列表的后面的最新的值立即执行调用任何回调
var callbacks = $.Callbacks("memory" );
callbacks.add( fn1 );
//第一次执行
callbacks.fire( "foo!" );//fn1:foo!
//若之前存在回掉列表调用即.fire(),立即执行最新添加的函数fn2,沿用上一次调用的参数
//若之前不存在回调函数调用即.fire(),则最新添加函数fn2也不发生调用
callbacks.add( fn2 );//fn1:fn2 says: foo!
callbacks.add( fn3 );//fn1:fn3 says: foo!
callbacks.fire( "bar!" );
/*
输出:
fn1:bar!
fn1:fn2 says: bar!
fn1:fn3 says: bar!
*/
callbacks.remove( fn2 );
callbacks.remove( fn3 );
callbacks.fire( "foobar" );//fn1:foobar
$.Callbacks( “unique” )示例说明:
function fn1( value ) {
console.log("fn1:"+ value );
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
//callbacks中去除重复添加的回调函数,确保不重复
var callbacks = $.Callbacks("unique" );
callbacks.add( fn1 );
//第一次执行
callbacks.fire( "foo!" );//fn1:foo!
//重复添加,$.Callbacks("unique" )设置回调列表不再次添加fn1
callbacks.add( fn1 );
callbacks.add( fn2 );
callbacks.fire( "bar!" );
/*
输出:
fn1:bar!
fn1:fn2 says: bar!
*/
callbacks.remove( fn2 );
callbacks.fire( "foobar" );//fn1:foobar
$.Callbacks( “stopOnFalse” )示例说明:
function fn1( value ) {
console.log("fn1:"+ value );
return false;
}
function fn2( value ) {
fn1("fn2 says: " + value);
return false;
}
//callbacks当一个回调返回false 时中断回调列表中回调函数的调用
var callbacks = $.Callbacks("stopOnFalse" );
callbacks.add( fn1 );
//第一次执行
callbacks.fire( "foo!" );//fn1:foo!
callbacks.add( fn2 );
callbacks.fire( "bar!" );//fn1:bar!
callbacks.remove( fn2 );
callbacks.fire( "foobar" );//fn1:foobar
$.Callbacks 方法也可以被分离, 为方便起见应该有一个需要定义简写版本:
var callbacks = $.Callbacks(),
add = callbacks.add,
remove = callbacks.remove,
fire = callbacks.fire;
add( fn1 );
fire( "hello world" );
remove( fn1 );