2012-02-21 11 views
1
HTML 

<input type="button" id="test" value="testMe"> 

javascriptの - 私はページをロードするとき>jqueryの関数のパラメータ渡し

var abc = '5'; 
j('#test').click(meraFunc(abc)); 
function meraFunc(abc) 
{ 
    alert(abc); 
} 

、アラートが '5' を示すポップアップする[私はまだボタンをクリックしたhavent]。ボタンをクリックすると何も起こりません。これはjQueryで引数を渡す正しい方法ですか?

答えて

6

匿名関数(jsfiddle demo)でそれをラップ:

j('#test').click(meraFunc(abc)); 

あなたは meraFuncを呼び出す次のとおりです。

j('#test').click(function() { 
    meraFunc(abc); 
}); 
+0

Perfectoooo!.. 10分でAcceping .. [SOルール... :)] – Umesh251

-1
Var abc= 5; 
$('#test').click(function()); 
function meraFunc(abc) 
{ 
    alert(abc); 
} 

問題は、このライン上にいることである

+0

これは本当に動作しますか? – Paul

8

を楽しみます返すものをそのまま渡します(unde罰金)を.click()関数に適用します。これがアラートがすぐにポップアップする理由です。

あなたはこのようになります .click()への関数の参照を渡す必要があり

j('#test').click(meraFunc); // no parens after meraFunc 

しかし、その後どのようにパラメータを渡しますか?

j('#test').click(function() { 
    meraFunc(abc); 
}); 

注意をそれはすぐに呼び出されませんので、私も追加した匿名関数は、それの後に何()括弧を持っていないことを次のように別の関数で呼び出しをラップします。その後、実際のクリックイベントが発生すると、無名関数が呼び出され、meraFunc(abc)というパラメータで関数が呼び出されます。

+0

+1の理由を説明してください。 – harag

0

@ Umesh251:あなたは@heikkimからの有効な解決策を得ていますが、既存のコードの異常な動作について説明したいと思います。

$('#test').click(meraFunc(abc)); 

あなたは#testにクリックイベントをバインドされていないので、あなたは、ページの読み込みにアラートを取得しました。テストボタンを手動でクリックしたときに警告が表示されなかった理由

+0

そうではありません。関数名の後の '()'のためにすぐに 'meraFunc'を呼び出し、' meraFunc() '(これは未定義になります)の戻り値を' .click() '関数に渡します。これはclickイベントを呼び出さないが、undefinedをバインドできないため、ハンドラをバインドしないことは明らかです。 – nnnnnn

+0

@nnnnnn:thats私が言ったこと。 'meraFunc(abc)'は何も返さないということを忘れてしまいました。ここで正確に何が起こるかは、クリックイベントをバインドもコールもしないことです。 http://jsfiddle.net/BPv3n/2/ – codef0rmer

+0

私が主張した部分は、「click _event_」(私の強調)を呼び出すと言ったところでした。 – nnnnnn

関連する問題