我是JavaScript的新手,我想知道为什么它不适合我:
function resetColor(){
$(this).css( { "color": "red" } )
}
$('.class').click(function() {
resetColor();
});
我在点击$(this)
时也尝试将.class
保存为变量,但这对我也没有用。
答案 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)
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" } )
});