2011-08-03 5 views
0
for (var key in obj[i]) { 
    dataDump[key] = textField.value; 
    var callback = function(zeKey){ 
     return function(e){ 
      dataDump[zeKey] = e.source.value; 
     }; 
    }(key); 
    textField.addEventListener('change', callback); 
} 

ページのロード時に呼び出されるばかり。機能は、私はしたくないし、代わりに私は私が変更を行う場合にのみ、これを呼び出すことがしたい、私は窓をロードすると、この関数は自動的に呼び出されます

要点はfunction(zeKey){...}(key)です。これを行うと、文字列であるkeyがパラメータ(zeKey)として無名関数にコピーされます。

+1

どちらが機能しますか?コールバックを設定する関数ですか?それの見た目では、そうではないでしょうか? – FishBasketGordo

答えて

1

var callback = function(zeKey){ 
    return function(e){ 
     dataDump[zeKey] = e.source.value; 
    }; 
}(key); 
  1. は、引数zeKeyと無名関数を呼び出します。
  2. この無名関数は、別の関数を返します。この返された関数は、コールバックに割り当てられます。

「関数が呼び出されています」とは、これが予想される動作です。

このコード全体は、DOMの準備ができてから呼び出す必要があります。これらをすべて関数に入れて、関数がwindow.onloadまたは(jQueryの)呼び出しであることを確認してください。.ready()

この関数によって返される関数は、コールバック中にのみ呼び出されます。

+0

私は..フィールドの2つのリスナーを書くことができます..私は.. textField.addEventListener( 'change'、コールバック、コールバック2)コールバック2は変更中にのみ呼び出される...通常の関数 –

+0

@John Cooperリスナーは要素の同じイベントを探します(その理由は_add_'EventListener'です)。これは、2つのリスナーを追加することで可能です: 'element.addEventListener( 'click'、function1);' 'element.addEventListener( 'click'、function2);' – Nivas

0

domが作成されると、これらのコードを追加します。上記のコードが関数内にある場合は、window.loadにアタッチするか、ページの最後にこれらのコードを記述します。

関連する問題