在外部函数中使用$(this)

时间:2014-08-22 22:53:33

标签: javascript jquery

我是JavaScript的新手,我想知道为什么它不适合我:

function resetColor(){
     $(this).css( { "color": "red" } )
}

$('.class').click(function() {
     resetColor();
});

我在点击$(this)时也尝试将.class保存为变量,但这对我也没有用。

6 个答案:

答案 0 :(得分:11)

更简单的方法是引用函数而不是将其包装在匿名函数中,如下所示:

$('.class').click(resetColor);

答案 1 :(得分:5)

最好的方法是将其作为参数传递

function resetColor(element) {
     $(element).css( { "color": "red" } )
}

$('.class').click(function() {
     resetColor(this);
});

另一种方法是将resetColor定义为对象内的函数

    jQuery.fn.resetColor = function() {
         $(this).css( { "color": "red" } )
    }
    $('.class').click(function() {
         $(this).resetColor();
    });

答案 2 :(得分:5)

this表示谁调用该函数的上下文。当您致电resetColor时,它会隐式使用顶级this,即window个对象。如果您希望通过函数调用维护上下文,可以使用call()

$('.class').click(function() {
    resetColor.call(this);
});

另一个显而易见的选择是不使用this,而是将元素作为参数传递。

function resetColor(e) {
     $(e).css({color: 'red'});
}

$('.class').click(function() {
     resetColor(this);
});

答案 3 :(得分:4)

this是Javascript中的一个特殊变量,它包含函数调用的 context 。当您以object.function()形式调用对象的属性时,this将获取对象的值。如果您不以这种方式调用该函数,this默认为window对象。由于你没有打电话给财产,后者就会发生。

解决问题的简单方法是将元素作为参数传递。

function resetColor(element) {
    element.css({ color: "red" });
}

$(".class").click(function() {
    resetColor($(this));
};

另一种方法是将事件直接绑定到函数:

$(".class").click(resetColor);

或者你可以在内部执行jQuery所做的事情,即使用.apply.call,它允许明确指定上下文:

$(".class").click(function() {
    resetColor.call(this);
});

答案 4 :(得分:3)

javascript中的

this是指对象的当前实例(与其他语言一样),是一个自动变量。它当然不能在对象上下文之外使用。

jQueries $是一个全局对象,以this始终是当前DOM引用的方式构建。这是jQuery背后的基本概念。

要解决上述问题,请查看以下代码:

function resetColor(that){
     $(that).css( { "color": "red" } )
}

$('.class').click(function() {
     resetColor(this);
});

答案 5 :(得分:2)

function resetColor(classname){
 $(classname).css('color', 'red');
 }

 $('.class').click(function() {
 resetColor(this);
 });

http://jsfiddle.net/eayx/ecLq37ey/

或添加要点击的功能。

$('.class').click(function() {
     $(this).css( { "color": "red" } )
});