jQuery回调 - 简短版本

时间:2010-04-21 23:48:55

标签: jquery

我已经挖掘了手册,并在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'
    });
}

谢谢!

2 个答案:

答案 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完全被浏览器本机支持实现。