2015-07-10 84 views
1

我對不同類別的2個不同的事件:

$('.box1').click(function(){ 
$(this).find('something').css('red') 
} 

$('#otherId .box2').change(function(){ 
$(this).find('something').css('red') 
} 

但我打算出來拆分功能,以避免重複的代碼

function getDetails(this){ 
    this.find(".something").css('red'); 
} 

但以後如何調用函數?將$(this)傳遞給函數?

$('#otherId .box2').change(function(){ 
getDetails($(this)) 
} 

回答

7

this是一個關鍵字,所以它不可能是一個PARAM名

function getDetails(el) { 
    el.find(".something").css('red'); 
} 

$('#otherId .box2').change(function() { 
    getDetails($(this)) 
}) 
+0

這比使用call()更好嗎? –

+2

兩者都是相同的...但我更願意將它作爲參數傳遞,而不是更改我看到的執行上下文 –

+0

。這也比較容易理解。 –

1

this不能用來作爲參數的關鍵字,但可以保留在函數體內使用this

function getDetails() 
{ 
    $(this).find(".something").css('red'); 
} 

然後調用它像這樣:

$('#otherId .box2').change(function() { 
    getDetails.call(this); 
} 

參見:Function.call()

+0

哦,它的醜陋:-) – zerkms

+0

@zerkms這就是她說...剛醒來,無法抗拒;-) –

0

您可以使用這樣的事情能夠穿過它,如果你想獲得的輸入值,然後改變它輸出的最終值旁邊:

var finalOutput; 

function getDetails(args) { 
    args = "Hello World"; 
    return args; 
} 

$('.box2').change(function(){ 
    var inputValue = $(this).val(); 
    finalOutput = getDetails(inputValue); 

    $('.box2').after('<b>' + finalOutput + '</b>'); 
}); 

這裏一個工作示例:

http://jsfiddle.net/La4v9mL0/