2009-07-27 15 views
0

チェックボックスのチェックされた状態に応じて何らかのアクションを取る方法があります。予想通り「クリック」イベントが動作しますが、foreachループの「MyFunctionの」コールはしていません:上記のコードでjQueryのカスタムメソッドで 'this'は定義されていません

$(document).ready(function(){ 
    $('#TreeView1 :checkbox') 
    .click(HandleCheckbox); // Works fine 

    // Go through the entire Category treeview to 
    // see if there are any checkboxes that are already 
    // checked. 
    $.fn.myFunction = HandleCheckbox; 
    $(":checked:checkbox").each(function(index) { 
    // In the HandleCheckbox 'this' is undefined. 
    $(this).myFunction(); 
    }); 

}); 

function HandleCheckbox() { 
    alert(this.name + '=' + this.checked); 
} 

、とき「.click」メソッド火災、 『これは』と、定義されています期待される。 foreachループで 'muFunction'を呼び出すと、 'this'は 'HandleCheckbox'関数で定義されていません。

私はまだjQueryのロープを勉強していますので、これを行う "より良い"またはより簡単な方法がある場合は、教えてください。

ありがとうございました。

答えて

6

また、これは動作します:

$(":checked:checkbox").each(HandleCheckbox) 
+0

これは私の状況で最もエレガントな解決策でした。ありがとう。 –

0

これを試してください:JavaScriptで

3
$("input:checkbox:checked").each(function(index) { 
    $(this).myFunction.apply(this); 
    }); 

thisは、オブジェクトの所有者を指します。イベントの場合、これはイベントを発生させたオブジェクトです。しかしながら、前記属性は、前記関数/イベントハンドラから呼び出された関数に対して継承されない。あなたが与えた例ではうまくいくはずだと思うかもしれませんが、私は言語の複雑さについて完全に知識がありませんが、これはここでの犯人だと思います。あなたがそれを使用したい場合はthisを基準に沿って渡し、そのよう:

$(this).myFunction(this); 

これは私を思い出させる、あなたが使用することによってこの問題を回避することができます

// this becomes the `this` "keyword" without defining a parameter to hold it 
$(this).myFunction.apply(this); 
+0

私は個人的にはこれが好きです。なぜなら、1回の使用変数が無意味に見えるように定義する必要がないからです。 –

1

このスコープを解決する一般的な方法問題:

parent_func = this; 
$(":checked:checkbox").each(function(index) { 
    $(parent_func).myFunction(); 
}); 
関連する問題