2011-12-13 88 views
1

我有問題也作出了同樣的網絡應用不同版本的Firefox的工作:顯示其ID丟失

var col = [{'id': 'id1'}, {'id': 'id2'}, {'id': 'id3'},{'id': 'id4'}, 
       {'id': 'id5'}, {'id': 'id6'}, {'id': 'id7'}, {'id': 'id8'}]; 
doSomething(col); 

如果id5不存在我的網頁顯示細膩的FF8,但在FF 3.5的不是這樣。

有沒有一種方法來報告或測試時,一個ID不存在,並顯示其名稱(因爲即使在瀏覽器控制檯不顯示其ID是)?

編輯

var col = [{'id': 'id1'}, {'id': 'id2'}, {'id': 'id3'},{'id': 'id4'}, 
        {'id': 'id5'}, {'id': 'id6'}, {'id': 'id7'}, {'id': 'id8'}]; 
    YAHOO.util.Dom.batch(col, desactivateBtn); 

    var desactivateBtn = function(btn){ 
      YAHOO.widget.Button.getButton(btn.id)._setDisabled(true); 
    }; 

我使用YUI和YAHOO.util.Dom.batch只是使之適用於在col的ID的所有按鈕desactivateBtn(它類似於jQuery的$.each法)

感謝

+3

您需要發佈負責顯示的代碼。一個小對象的數組並不能解釋這個問題(這很可能在'doSomething'方法中,並且與FF或IE無關) –

+0

感謝回覆,用doSomething的代碼編輯 –

回答

2

你試圖訪問未找到元素的屬性或方法。

變化:

var desactivateBtn = function(btn){ 
     YAHOO.widget.Button.getButton(btn.id)._setDisabled(true); 
    }; 

要:

var desactivateBtn = function(btn){ 
     var elem = YAHOO.widget.Button.getButton(btn.id); 
     if(elem) elem._setDisabled(true); 
    }; 

我遇到了IE吞嚥什麼其他的瀏覽器會考慮破例了類似的問題。這個問題源於使用eval(這是遺留代碼,不是我寫的)。我沒有看過雅虎的圖書館,但我不知道如果getButton方法使用eval內部?

編輯:如果你想顯示的物品丟失,有沒有簡單的方法來做到這一點跨瀏覽器IE8,因爲沒有console.log。您可以選擇將輸出寫入調試div元素或使用消息進行警報。我可能會去調試div元素。

var DEBUG = true; 
window.DEBUG_OUTPUT = null; 

if(DEBUG) { 
    window.DEBUG_OUTPUT = /* create div, append to whatever element */ 
} 

然後,你可以修改你的函數是這樣的:

var desactivateBtn = function(btn){ 
    var elem = YAHOO.widget.Button.getButton(btn.id); 
    if(elem) { elem._setDisabled(true); } 
    else { window.DEBUG_OUTPUT.innerHTML = window.DEBUG_OUTPUT.innerHTML + ('' + btn.id); 
}; 

幾件事情要注意:

  1. 我不喜歡加入到window對象,但對於控制檯/調試我認爲這是正常的。
  2. ('' + btn.id)強迫非字符串ID(如12等)的字符串。我不確定這是否再次出現問題,但是在某些瀏覽器中很久以前我遇到了一個bug,因爲3不是字符串,所以設置innerHTML = 3會導致錯誤。我還沒有時間來測試這在任何主流瀏覽器中是否仍然存在問題。

edit2:更好,把btn.id換成<p></p>標籤。

+0

非常感謝這個答案,測試如果這個元素在訪問它的屬性之前就已經存在了很多,至於eval,我會嘗試在yui代碼中挖掘它是否被使用。 –

2

您可以檢查缺失的元素有:

if (document.getElementById(idValue) === null) { 
    console.log("Element " + idValue + " not found"); 
    } 
    else { 
    // doSomething ... 
    } 
1

您可以使用您的選擇返回了jQuery收集的length屬性:

if ($('#field_id').length) // element exist 
{ 
      // do something 
}else{ 
      // do some other thing 
} 

這是更好的方式來檢查ID存在。因爲length檢查nullundefined含蓄,並拋出任何錯誤。