2014-02-20 26 views
-1

我想用参数调用事件处理程序。它没有争论就可以正常工作。使用参数调用事件处理程序

我在哪里错了?

var box = $("#box"); 

function changeColor (a) { 
    $(this).css("background", a); 
} 

box.click(changeColor("green")); 
+0

首先评估所有参数。所以,如果你有'foo(bar())','bar'首先被调用并且它的返回值被传递给'foo'。 –

+0

另外一个[我如何将参数传递给jQuery中的事件处理程序?](http://stackoverflow.com/q/979337/218196) –

+0

@navigator您需要使用'call()',检查我的答案。 – Felix

回答

1

您需要使用call()调用里面click事件的功能:

var box = $("#box"); 

function changeColor (a) { 
    $(this).css("background", a); 
} 

box.click(function(){ 
    changeColor.call(this, "green"); 
}); 

Fiddle Demo

0

使用.call()

Fiddle Demo

box.click(function(){ 
    changeColor.call(this, "green"); 
}); 
+0

dosen't似乎工作 – navigator

+0

@navigator检查更新的答案与演示 - > http://jsfiddle.net/cse_tushar/hU9Xy/ –

+1

是的,现在的作品! – navigator

0

要调用你的changeColor函数,而不是把它当作回调。相反,你应该做的:

box.click(changeColor.bind(this, "green")); 

bind方法创建已填写参数的新功能,它几乎等同于做:

box.click(function() { 
    changeColor("green"); 
}); 
0
var box = $("#box"); 

function changeColor (a) { 
    $(this).css("background", a); 
} 

box.click(function(){ 
    changeColor("green"); 
}); 
0

您试图分配的返回值而不是该功能本身。在一个函数封装changeColor()如下套box.click()的功能

box.click(function(){ 
    changeColor.call(this, "green") 
}); 

Fiddle

+0

这是行不通的,我先试了 – navigator

+0

问题是你需要使用'.call()'来设置函数调用的上下文。所以你最终在回调中设置'this'的值。我修改了我的代码以反映这一点。 –

相关问题