每个()和自定义函数的jQuery麻烦

时间:2010-02-01 11:36:30

标签: jquery function each

    $(function(){
        $(".test").each(function(){
            test();
        });
    });

     function test(){
        $(this).css("border","1px solid red").append(" checked");
    }

为什么这不起作用?我错过了什么? 这是我的测试html:

    <p>test</p>
    <p>test</p>
    <p class="test">test</p>
    <p>test</p>

3 个答案:

答案 0 :(得分:5)

$(this)不能以这种方式使用,因为你没有指定test()函数的上下文:

$(".test").each(function(){
        test($(this));
});

function test(el){
     el.css("border","1px solid red").append(" checked");
}

$(".test").each(function(){
      test.call(this);
});
function test(){
   $(this).css("border","1px solid red").append(" checked");
}

答案 1 :(得分:1)

在您的测试函数内部,this不受您认为它所绑定的相同内容的约束。使用像firebug这样的调试器来查看你实际使用的是什么。

执行此操作的惯用方法是简单地在闭包内部包含测试主体(function(){...})。

其他解决方案,您可以使用apply函数(https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Function/Apply)来控制this引用的内容。在这种情况下,它太过分了,实际上,我发现最好一般都避免使用它。

$(function(){
        $(".test").each(function(){
            $(this).css("border","1px solid red").append(" checked");
        });
    });

答案 2 :(得分:0)

test.call(this);test(this);并更改定义。