2011-12-13 89 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含蓄,并抛出任何错误。