2010-05-03 165 views
2

這是我的代碼snippt。但是代碼在內循環之後破壞了。但沒有錯誤信息。 有什麼想法?代碼錯誤在哪裏

謝謝。

var lastnames = document.getElementsByClassName('box_nachname'); 
    var firstnames  = document.getElementsByClassName('box_vorname'); 
    var teilnehmer = document.getElementsByClassName('select'); 
    observers = []; 

    // iterate over nachname array. 
    for (var i = 0; i < lastnames.length; i++) { 

     // Create an observer instance. 
     observers[i] = new Observer(); 


     // Subscribe oberser object. 
     for(idx in teilnehmer) { 
      if(teilnehmer[idx].id.split("_")[0].toLowerCase() !== "zl") { 
       var anynum = function(element) { 
              observers[i].subscribe(element, updateTeilnehmerSelectbox); 
             }(teilnehmer[idx]); 
      } 
     } 


     //on blur the Observer fire the updated info to all the subscribers. 
     var anynumNachname = function(j, element, value, observer) { 
              cic.addEvent(lastnames[j], 'blur', observer.fire(element, value)); 
              } (i, lastnames[i], lastnames[i].value, observers[i]); 
     cic.addEvent(firstnames[i], 'blur', function(element, value, observer) {observer.fire(element, value)}(lastnames[i], lastnames[i].value, observers[i])); 

    } 

回答

2

您在「addEvent」調用中使用循環變量「i」。這將無法正常工作,因爲每個事件處理程序將共享相同的「我」,因此每個只會看到「我」設置的最後一個值。

cic.addEvent(firstnames[i], 'blur', (function(index) { 
    return function(element, value, observer) { 
    observer.fire(element, value)}(lastnames[index], lastnames[index].value, observers[index]); 
    }; 
})(i)); 

而且,雖然我不知道這是必須的,我把你呼喚括號「anynumNachname」功能:

var anynumNachname = (function(j, element, value, observer) { 
    cic.addEvent(lastnames[j], 'blur', observer.fire(element, value)); 
})(i, lastnames[i], lastnames[i].value, observers[i]); 
+0

關於在括號包裝'anyNachname':有一個JSLint選項來「要求立即調用周圍的parens」,它需要在作業的整個右側都有parens,而不僅僅是函數。所以圍繞函數本身的parens是多餘的;我想你正在考慮包裝整個調用? – 2010-05-03 17:22:58

+0

不,我習慣於包裝函數定義本身,因爲當您的表達式以函數定義開始時,它是必需的。我想,當明確的函數定義只是一個r值時,不需要parens。 – Pointy 2010-05-03 17:43:25

+0

爲了澄清該評論:您需要明確地讓Javascript解析器明白,您不是在爲了立即調用而需要匿名函數的情況下聲明函數。 (我知道你知道,@熊,但澄清是爲後人:-) – Pointy 2010-05-03 17:50:15