2014-02-20 59 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'的值。我修改了我的代碼以反映這一點。 –

相關問題