2012-03-06 30 views
1

jQueryのjavascript関数にオプションの引数を渡そうとしています。以下の例では、引数を受け取る関数は 'foo'です。それは引数を渡すjQueryの2番目のビットでうまく動作します。 jQueryの最初のビットには渡す引数はありませんが、jQueryはまだオブジェクトを渡すようです。jQueryのjavascript関数にオプションの引数を渡す

最終的に私はオプションのパラメータであることを「バー」をしたい、と私は何を渡さない場合は0に設定してください。

//jQuery Bit #1  
    $('#id').change(foo); 

    //jQuery Bit #2 
    $('#id2').click(function(e){ 
      var bar = $(e.target).text(); 
      foo(bar); 
      }); 

    function foo(bar) { 
      if (!bar) var bar = 0; 
      //do stuff here 
      } 

私はちょうど「バー」を渡す必要がありますjQueryのオブジェクトを渡しているので、オブジェクトとしてそれをオブジェクトの属性としてチェックしますか?または、jQueryが行うこと、またはこの状況でjQueryを使用しているべきことが不足していますか?

+0

バー() 'は何の例を返しませんが、あなたが望む、または求めているかを把握することは本当に難しいです...とクリックハンドラで'のvar bar'が文字列であるので、およそ本当に混乱し 'ので、オブジェクトの問題 – charlietfl

答えて

4

ここで、jQueryは、イベントオブジェクトを設計通りにコールバックclickに渡しています。あなたはjQueryのは、引数なしでコールバックを呼び出すしたいなら、あなたはラムダでそれをラップする必要があると明示的に引数

を渡さない
$('#id').change(function() { foo(); }); 
1

2つのオプションが:どちらか一方は必ずイベントオブジェクトを渡し、または決してしない。

常に:

//jQuery Bit #1  
$('#id').change(foo); 

//jQuery Bit #2 
$('#id2').click(function(e){ 
     var bar = $(e.target).text(); 
     foo(e, bar);  // <== Note change here 
     }); 

function foo(e, bar) { 
     if (!bar) bar = 0; // <== no "var" on this line 
     } 

決して:あなたがいない

//jQuery Bit #1  
$('#id').change(function() { foo(); }); // <=== Note change here 

//jQuery Bit #2 
$('#id2').click(function(e){ 
     var bar = $(e.target).text(); 
     foo(bar); 
     }); 

function foo(bar) { 
     if (!bar) bar = 0; // <== no "var" on this line 
     } 

注意をfooのどこにでも使用して、barと宣言してください。 barは引数ですが、それに割り当てることができます。


FWIWは:また、あなたの例では、barは、いずれかの文字列(ターゲット要素のテキスト)または番号(0)になることに注意してください。テキストがない場合は

var bar = parseInt($(e.target).text(), 10); // 10 = I'm assuming decimal 

var bar = parseFloat($(e.target).text()); // parseFloat always assumes decimal 

、またはそれが解析可能ではありません。矛盾のようなものは、あなたがテキストを取得しているparseIntまたはparseFloatを使用して検討するかもしれない、あなたをかむことができます(それが可能、常に数をすべきであると仮定した場合)番号、barNaNであろうと(!NaNtrueため)fooのコードは、それ0なります。

+0

追加情報ありがとう!それは私が考えていなかった正直なところですが、私はこの特定の状況に悪影響を及ぼしていないと思います。私はそれを後で拡大しなければなりませんでした! – nick

1

私はあなたが

EDITとしての機能を書き換えた場合、あなたのコードが動作すると信じて:コードが修正されました。

//jQuery Bit #1  
$('#id').change(foo); // will be effectively invoked as "foo(event, undefined)" 

//jQuery Bit #2 
$('#id2').click(function(e){ 
     var bar = $(e.target).text(); 
     foo(null, bar); 
     }); 

function foo(unusedEvent, bar) { 
     bar = bar || 0; 
     //do stuff here 
} 
+0

いいえ、そうはなりません。時には、イベントオブジェクトを最初の引数として取得しています。 –

+0

ああ、私は署名のためにそれを逃した。それを修正しよう... –

関連する問題