3.7.2 创建Callbacks对象支持的选项
使用jQuery.Callbacks()
创建Callbacks
对象时,可以传入可选的flags
参数,该参数是一个以空格分隔的字符串列表,表示如何改变回调函数列表的行为,例如$.Callbacks('unique stopOnFalse')
。
jQuery
支持下列选项。
选项 |
描述 |
once |
保证整个Callbacks 对象只能被fire() 一次。 |
memory |
缓存前一次调用的参数。当执行完fire() 后Callback 会缓存这次fire 方法传入的参数,对于新添加的任何回调函数,会自动触发该回调函数,并传入缓存的参数作为新添加的回调函数的参数。 |
unique |
保证一个回调函数最多只被添加一次,也就是说,Callbacks 对象中不会出现重复的回调函数。 |
stopOnFalse |
当某回调函数返回false 时,立即中断调用。 |
程序示例
下面的程序代码示范了创建Callbacks
时各选项的功能。
one选项的用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 回调支持 </title> </head>
<body> <script type="text/javascript" src="../jquery-3.1.1.js"></script> <script type="text/javascript"> function fn1(value) { document.writeln("fn1函数输出:" + value + "<br />"); } function fn2(value) { document.writeln("fn2函数输出:" + value + "<br />"); return false; } var callbacks = $.Callbacks("once"); callbacks.add(fn1); callbacks.fire("疯狂前端开发"); callbacks.add(fn2); document.writeln("<hr/>"); callbacks.fire("~~疯狂Java~~"); </script> </body>
</html>
|
在创建Callbacks
对象时指定了”once"
选项,这表明该Callbacks
对象只能被触发一次。
memory选项的用法
以下代码示范了memory
选项的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 回调支持 </title> </head>
<body> <script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> function fn1(value) { document.writeln("fn1函数输出:" + value + "<br />"); } function fn2(value) { document.writeln("fn2函数输出:" + value + "<br />"); return false; } var callbacks = $.Callbacks("memory"); callbacks.add(fn1); callbacks.fire("疯狂前端开发"); callbacks.add(fn2); document.writeln("<hr/>"); callbacks.fire("疯狂Java"); callbacks.remove([fn1, fn2]); document.writeln("<hr/>"); callbacks.add(fn1); </script> </body>
</html>
|
在创建Callbacks
时指定了”memory"
选项,这表明该Callbacks
对象将会保留上次调用fire()
方法的参数,并以该参数自动激发新添加的回调函数。
stopOnFalse选项
以下代码示范了stopOnFalse
选项的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 回调支持 </title> </head>
<body> <script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> function fn1(value) { document.writeln("fn1函数输出:" + value + "<br />"); return false; } function fn2(value) { document.writeln("fn2函数输出:" + value + "<br />"); return false; } var callbacks = $.Callbacks("stopOnFalse"); callbacks.add(fn1); callbacks.fire("疯狂前端开发"); callbacks.add(fn2); document.writeln("<hr/>"); callbacks.fire("疯狂Java"); </script> </body>
</html>
|
在创建Callbacks
时指定了”stopOnFalse"
选项,这表明该Callbacks
对象触发回调函数列表时,只要任一个回调函数返回了false
,都将会导致后面的回调函数不会被调用。
使用多个选项
不仅如此,创建Callbacks
对象时,还可传入多个空格隔开
的选项,多个选项的效果将会被”累加”。例如$.Callbacks("unique memory")
创建的Callbacks
对象既会缓存前一次调用fire()
方法的参数,也会保证Callbacks
对象中不出现重复的回调函数。