Проблемы jQuery с каждой () и пользовательской функцией - PullRequest
1 голос
/ 01 февраля 2010
    $(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 ]

5 голосов
/ 01 февраля 2010

$ (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 голос
/ 01 февраля 2010

Внутри вашей тестовой функции 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");
        });
    });
0 голосов
/ 01 февраля 2010

или test.call(this); или test(this); и измените определение.

...