0

我很好奇为什么这不起作用。这是更具假设性的,但我确实在我正在做的网站上遇到了这个问题。我试图避免在函数中使用 jQuery 函数。this 选择器是窗口而不是每个框。

编辑* ** 我明白如何做 $(".box").each(function(){ // 代码在这里 }); 但是函数内部的函数不是草率或不好的做法吗?

http://jsfiddle.net/B8Yp3/3/

CSS

.box {
    height: 50px;
    width: 50px;
    background: green;
    margin-bottom: 5px;
}

HTML

  <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>

Javascript

 function changeMe(obj) {
        console.log(obj);
        $(obj).css("background", "blue");
    }

    $.each($(".box"), changeMe(this));
4

3 回答 3

4

正如您所指出的,当您调用该$.each函数时,this仍然指的是窗口对象。要this引用 jQuery 对象,您可以在匿名函数中调用它,从而应用适当的范围。

$(".box").each(function(){ 
    changeMe(this); 
});

作为旁注,在 Javascript 中调用其他函数内部的函数绝对不是坏习惯、草率或任何负面的东西。事实上,它是 Javascript 编程的基石(其中最重要的概念之一,回调,依赖于其他函数内部的函数)。函数是 Javascript 中的一等公民,因此它们可以被传递,被嵌入其他函数中,并被视为任何其他对象。

您可能有兴趣阅读MDN 文档中有关函数的更多信息。他们解释了很多关于函数是对象、嵌套函数、闭包等的内容,如果您想了解如何最好地使用函数,您可能会感兴趣。

于 2013-05-08T16:03:14.423 回答
4

其次,每个参数必须是函数 - 不是函数结果:

$(".box").each(changeMe);

function changeMe(n, obj) { ........
于 2013-05-08T16:04:02.560 回答
2

因为 的第二个参数$.each应该是 a function

如果你通过changeMe(this),你传递的返回值changeMe- 你应该把它包装成一个匿名函数:

 $.each($(".box"), function(){

    changeMe(this)

 });
于 2013-05-08T16:03:50.253 回答