通过$(本)从功能发挥作用

问题描述:

我对不同类别的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)) 
} 

this是一个关键字,所以它不可能是一个PARAM名

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

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

这比使用call()更好吗? –

+2

两者都是相同的...但我更愿意将它作为参数传递,而不是更改我看到的执行上下文 –

+0

。这也比较容易理解。 –

this不能用来作为参数的关键字,但可以保留在函数体内使用this

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

然后调用它像这样:

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

参见:Function.call()

+0

哦,它的丑陋:-) – zerkms

+0

@zerkms这就是她说...刚醒来,无法抗拒;-) –

您可以使用这样的事情能够穿过它,如果你想获得的输入值,然后改变它输出的最终值旁边:

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/