2011-01-07 27 views
3

ちょっと、凝縮されているように見えますが、どうしたらよいかわかりません。Javascript named、self-calling function

私が持っているコードは、そうでなければ、それを非表示に、チェックボックスがチェックされ、フォームが表示されている場合は、基本的にチェックし、この

var checkForUnitReferred = function() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
}; 
checkForUnitReferred(); 

$("#Claim_UnitReferredNoNull").change(function() { 
    checkForUnitReferred();   
}); 

あります。私はというだろうと、私は、これは動作しません知っているが、私はそのような何かがきれいになると思います。この

var checkForUnitReferred = (function() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
})(); 

$("#Claim_UnitReferredNoNull").change(function() { 
    checkForUnitReferred();   
}); 

のようなものです。誰でもこれを達成する方法を知っていますか?

+1

あなたはそれぞれの変更イベントに最初にして、 'checkForUnitReferred'を呼びたいわけ?あなたの2番目のコードは必然的にどんなクリーナーでもないと私は言いません。 –

+0

ええ、それは私がやりたいことです。私はちょうど関数を宣言してすぐに呼び出すのが好きではなく、宣言したら – Jimmy

+1

+1 hypnotoad ... +1 hypnotoad ... +1 hypnotoad ... – Ben

答えて

5

これはどう:

var checkForUnitReferred; 

(checkForUnitReferred = function() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
})(); 

$("#Claim_UnitReferredNoNull").change(function() { 
    checkForUnitReferred();   
}); 

割り当て(=)演算子は値のセットを返しますので、これは可能です。

2

変数に割り当てる匿名の名前を作成するのではなく、直接関数に名前を付けます。また、余分なラッパー関数なし.change()ハンドラとしてこの機能を割り当てることがあります。

(function checkForUnitReferred() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
})(); 

$("#Claim_UnitReferredNoNull").change(checkForUnitReferred); 
+0

私のためには動作しません。ページロード時には動作しますが、変更イベントは発生しません。 – Jimmy

+0

@lonesomeday:実際には、ここでは吊り上げはありません。括弧は、関数が関数宣言ではなく名前付き関数式として解析されることを保証します。その場合、これはIEで独自の問題を抱えているので、おそらく避けてください。http://kangax.github.com/nfe/ –

+0

@Tim Gah、ありがとう。私の間違ったコメントを削除しました。 – lonesomeday