将参数传递给事件处理程序
在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
},
匿名函数应该在这里做的伎俩。在匿名函数内部,this.successFunction
将是未定义的,所以我们需要在匿名函数之外存储对this
的引用。
var that = this;
$.ajax({
...
success: function() {
that.successFunction(msg);
}
...
});
你可以使用一个封闭:
mySaveFunction: function(i) {
var msg = "my message " + i;
$.ajax({
...
success: function(response) {
alert(msg); /* msg is available here */
}
...
});
这不是封闭,这是一个匿名函数。 – 2012-07-15 21:57:26
@ElliotBonneville:这是两个。 – 2012-07-15 21:58:14
是吗?那么,我对闭包的理解必须是关闭的。不过,我会接受你的话。 :) – 2012-07-15 21:59:41
您可以使用一个封闭:
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
},
'上下文:这可能是更干净的,会upvote,p – Esailija 2012-07-15 22:02:14
@Esailija:公平点,jQuery在这种情况下提供的有用('ajax')。我会离开它,但期望人们会看到评论和理解。 – 2012-07-15 22:04:05
您可以使用$.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
'this'仍然是'successFunction'以外的东西,可能与上面的代码一样。 (它将成为全局对象)。首先将它放入一个变量中是没有任何目的的,因为这样做并不能保留“this”。 – 2012-07-15 22:05:15
不,但我保留'successFunction',以便在'this'发生变化时可以调用它。对? – 2012-07-15 22:14:29
这项任务确实毫无意义 – Esailija 2012-07-15 22:15:33