2010-04-21 29 views
0

我已經挖了手冊,並試圖在errorsuccess之後放棄額外的function(){...}調用,使其像mootools一樣做,但沒有好運氣。jQuery回調 - 短版本

有沒有什麼辦法可以避免jQuery中額外的function

function doFileDelete(ui) { 
    $.ajax({ 
     error: function() { doFileDeleteAnimation(ui, false) }, 
     success: function() { doFileDeleteAnimation(ui, true) }, 
     url: '/url-to-delete-file' 
    }); 
} 

謝謝!

+1

你在那裏有什麼問題?這似乎是相當習慣javascript給我。 – 2010-04-21 23:53:22

回答

1

如果您希望調用的函數中沒有參數,那麼您可以將函數的名稱作爲您的回調參數。但是,如果您至少有一個參數,則必須聲明該函數並傳遞必要的數據。

有關回調的更多信息,請參閱jQuery documentation

+0

謝謝傑森!我已經鑽研了API並錯過了所有的操作方法。我發現到目前爲止,jQuery的手冊比moo有點稀疏。儘管如此,謝謝你的好建議。 – Frankie 2010-04-21 23:56:20

+0

它其實很不錯。檢查了這一點:http://www.futurecolors.ru/jquery/ – Jason 2010-04-21 23:58:10

+0

非常有用!已經打印並坐在我的屏幕上方!非常感謝你! – Frankie 2010-04-22 00:16:09

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調用中指定的調用。因此,在我的示例中,當您單擊#test時,handler會收到三個參數:傳入的布爾值,事件對象和被單擊的DOM元素。

jQuery有一個相當於bind的功能$.proxy。默認情況下,它不允許你像bind這樣的功能,但有人會給它的功能wrote an extension to it

在我看來,bind是一個比$.proxy更好的選擇,因爲它具有更清晰的語法,不需要你修補jQuery,一旦完全實現了ECMAScript 5,瀏覽器將本機支持它。

+0

謝謝!這肯定是一個很好的解決方案,我將不得不考慮後者的一些更復雜的部分! – Frankie 2010-04-22 00:17:28