jQuery每次调用其他函数

时间:2013-05-08 16:01:36

标签: jquery arrays

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

编辑*的 ** 我理解如何做$(“。box”)。each(function(){// code here});但是在功能里面是不是草率或不好的练习功能?

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));

3 个答案:

答案 0 :(得分:4)

当您调用$.each函数时,this仍然引用窗口对象,如您所述。要让this引用jQuery对象,可以在匿名函数中调用它,这将获得适当的范围。

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

作为旁注,在Javascript中调用其他函数内部的函数绝对不是不好的做法,草率或任何负面的。事实上,它是Javascript编程的基石(其中一个最重要的概念,回调,依赖于其他函数内部的函数)。函数是Javascript中的一等公民,所以它们可以被传递,被困在其他函数中,并被视为任何其他对象。

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

答案 1 :(得分:4)

第二个参数必须是函数 - 不是函数结果:

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

function changeMe(n, obj) { ........

答案 2 :(得分:2)

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

如果您传递changeMe(this),则传递changeMe的返回值 - 您应该将其包装到匿名函数中:

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

    changeMe(this)

 });