我已经挖掘了手册,并在function(){...}
和error
之后广泛尝试删除额外的success
来电,就像mootools一样,但没有好运。
有什么办法可以避免jQuery中额外的function
吗?
function doFileDelete(ui) {
$.ajax({
error: function() { doFileDeleteAnimation(ui, false) },
success: function() { doFileDeleteAnimation(ui, true) },
url: '/url-to-delete-file'
});
}
谢谢!
答案 0 :(得分:1)
如果您要调用的函数中没有参数,是的,您只需将函数名称作为回调参数传递即可。但是,如果您至少有一个参数,则必须声明该函数并传递必要的数据。
在jQuery documentation中了解有关回调的详情。
答案 1 :(得分:1)
您还可以使用Function.prototype.bind
(原型库版本或ECMAScript 5本机版本,如果您的浏览器支持它)来消除该外部函数。例如:
function handler(myBoolean) {
console.log(myBoolean); // will output true
}
$(function() {
$('#test').click(handler.bind(this, true));
});
bind
的第一个参数是您要在其中执行函数的上下文。后续参数将传递给handler
函数。当jQuery执行handler
作为回调时,函数调用将被调用,并且它传递的参数将被添加到您在bind
调用中指定的参数。因此,在我的示例handler
中,当您单击#test
时将收到三个参数:您传入的布尔值,事件对象以及单击的DOM元素。
jQuery与函数$.proxy
大致相当于bind
。默认情况下,它不允许您像bind
这样的功能,但有人wrote an extension to it会为其提供该功能。
在我看来,bind
是比$.proxy
更好的选择,因为它具有更清晰的语法,不需要你修补jQuery,并且一旦ECMAScript 5完全被浏览器本机支持实现。