2011-08-03 171 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)。當你這樣做的時候,鍵是一個字符串被作爲參數(zeKey)複製到你的匿名函數中。

+1

哪個功能?該函數設置回調?從外表看,它不是應該的嗎? – FishBasketGordo

回答

1

以下

var callback = function(zeKey){ 
    return function(e){ 
     dataDump[zeKey] = e.source.value; 
    }; 
}(key); 
  1. 調用與參數zeKey匿名函數。
  2. 這個匿名函數返回另一個函數。這個返回的函數被分配給回調函數。

如果你的意思是「函數正在調用」,那麼這就是預期的行爲。

只有在DOM準備就緒後,才應該調用整個代碼。將所有這些放在一個函數中,並確保僅在window.onload或(jQuery's).ready()

上調用該函數,該函數返回的函數僅在回調期間被調用。

+0

我可以爲一個字段寫兩個列表器..我的意思是.. textField.addEventListener('change',callback,callback2)其中callback2只會在更改期間被調用...一個正常的函數 –

+0

@John Cooper你可以寫多個一個元素的相同事件的監聽器(這就是爲什麼_add_'EventListener')。你這樣做,加上兩個監聽器:'element.addEventListener('click',function1);''element.addEventListener('click',function2);' – Nivas

0

創建dom後添加這些代碼。如果上面的代碼位於函數內部,請附加到window.load或在頁面末尾寫入這些代碼。