1
    $(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>
4

3 に答える 3

5

test()関数のコンテキストを指定しないため、$(this)をそのように使用することはできません。

$(".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");
}
于 2010-02-01T11:41:05.090 に答える
2

テスト関数の内部では、thisバインドされていると思うものと同じものにバインドされていません。firebugのようなデバッガーを使用して、実際に作業しているものを確認します。

これを行う慣用的な方法は、クロージャ内にテストの本体を含めることです(function(){...})。

他の解決策として、適用関数(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");
        });
    });
于 2010-02-01T11:40:38.007 に答える
0

test.call(this);またはと定義test(this);を変更します。

于 2010-02-01T11:44:54.567 に答える