2012-07-15 154 views
0

在jquery中,如何將附加參數傳遞給事件處理函數?將參數傳遞給事件處理程序

因此,例如

mySaveFunction: function(i) { 
var msg = "my message " + i; 
$.ajax({ 
    ... 
    success: this.successFunction, // i want to pass msg to successFunction 
    ... 
}); 

successFunction: function(response) { 
    // do something with msg 

}, 

回答

3

匿名函數應該在這裏做的伎倆。在匿名函數內部,this.successFunction將是未定義的,所以我們需要在匿名函數之外存儲對this的引用。

var that = this; 

$.ajax({ 
    ... 
    success: function() { 
     that.successFunction(msg); 
    } 
    ... 
}); 
+0

'this'仍然是'successFunction'以外的東西,可能與上面的代碼一樣。 (它將成爲全局對象)。首先將它放入一個變量中是沒有任何目的的,因爲這樣做並不能保留「this」。 – 2012-07-15 22:05:15

+0

不,但我保留'successFunction',以便在'this'發生變化時可以調用它。對? – 2012-07-15 22:14:29

+0

這項任務確實毫無意義 – Esailija 2012-07-15 22:15:33

-1

你可以使用一個封閉:

mySaveFunction: function(i) { 
var msg = "my message " + i; 
$.ajax({ 
    ... 
    success: function(response) { 
     alert(msg); /* msg is available here */ 
    } 
    ... 
}); 
+0

這不是封閉,這是一個匿名函數。 – 2012-07-15 21:57:26

+3

@ElliotBonneville:這是兩個。 – 2012-07-15 21:58:14

+0

是嗎?那麼,我對閉包的理解必須是關閉的。不過,我會接受你的話。 :) – 2012-07-15 21:59:41

-1

可以使用匿名函數:

success: function() { 
    this.successFunction(parameters); 
    } 
+1

這是行不通的,因爲'this'不會是你想要的,所以'this.successFunction'就不對了。 – jfriend00 2012-07-15 22:10:47

+0

這裏'this'將是'window'。 – 2012-07-15 22:36:09

+0

我遺漏了我會做的部分var self = this;在定義處理程序之前,然後在匿名函數中使用self。 – Satya 2012-08-05 18:46:33

0

您可以使用一個封閉:

mySaveFunction: function(i) { 
    var self = this; // <=== Grab what `this` is 
    var msg = "my message " + i; 
    $.ajax({ 
     ... 
     success: function(response) { 
      self.successFunction(response, msg); // <=== Use it and `msg `here 
     ... 
    }); 
// ... 

successFunction: function(response) { 
    // do something with msg 
}, 
+1

'上下文:這可能是更乾淨的,會upvote,p – Esailija 2012-07-15 22:02:14

+0

@Esailija:公平點,jQuery在這種情況下提供的有用('ajax')。我會離開它,但期望人們會看到評論和理解。 – 2012-07-15 22:04:05

0

您可以使用$.proxy

mySaveFunction: function(i) { 
    var msg = "my message " + i; 
    $.ajax({ 
      ... 
     success: $.proxy(this.successFunction, this, msg), // i want to pass msg to 
      ... 
    }); 
}, 
successFunction: function(msg, response) { 
    // do something with msg 
}, 

Docs雖然部分應用程序仍然無證,但implemented

相關問題