2009-08-06 11 views
1

私は、第2の関数をonClickイベントにバインドするために、以下の最初の関数を呼び出しています。jQueryイベントを発生させるバインドイベント

奇妙なことは、最初の関数を呼び出すと2番目の関数が呼び出されるということです。

最初の関数のLinkNameパラメータは、テーブルのtd要素の名前です。おそらく関係ありません。

function EnableExpand(LinkName, i) { 
    $(LinkName).addClass("link-text"); 
    $(LinkName).bind("onclick", ExpandFrame(LinkName, i)); 
} 

function ExpandFrame(lName, i) { 
    $("#mapFrame" + i).attr({ height: 500, width: 800 }); 
} 

答えて

4

問題は、.bind()の2番目の引数は関数である必要がありますが、関数を呼び出すことです。 JQueryは関数呼び出しを評価し、その結果をclickイベントにバインドしようとします。

javascriptエンジンは、匿名関数で関数呼び出しをラップすることで、ラッパー関数をイベントにバインドし、その内部の内容を評価しません。

次のコードを使用すると、上記のコードと同じことに気づくと便利です。

$(LinkName).click(function() { ExpandFrame(LinkName, i) }()); 
+0

ありがとう、それらの匿名機能を愛している... – GilShalit

+0

+1素晴らしい説明! –

4

clickイベントが発生したときに呼び出される関数を渡す必要があります。あなたが持っていた方法では、関数をすぐに呼び出して、JQueryにその関数から返される値が何であれ呼び出すように指示していました。

$(LinkName).bind("click", function() { ExpandFrame(LinkName, i); }); 
+0

正解ですが、理由を説明するとよいでしょう。 ;) – Joel

+0

ええ、なぜですか? 気にしないで、うまくいった、ありがとう! – GilShalit

2

バインドする必要はありません。 .clickが行います。

関連する問題