显示缺少哪个ID

时间:2011-12-13 15:18:00

标签: javascript firefox yui

我遇到了使相同的网络应用程序适用于不同版本的Firefox的问题:

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只是为了在desactivateBtn中使用id的所有按钮上应用col(它类似于jQuery的$.each方法)

谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法检查缺失的元素:

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

答案 1 :(得分: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(它是遗留代码,不是由我编写的)。我没有看过YAHOO的库,但我想知道getButton方法是否在内部使用eval

编辑:如果您想显示缺少哪些项目,那么跨浏览器没有简单的方法,因为IE8没有console.log。您可以选择将输出写入debug div元素或使用该消息进行警报。我可能会使用debug 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等)到字符串。我不确定这是不是一个问题,但我很久以前在一些浏览器中遇到一个错误,设置innerHTML = 3会导致错误,因为3不是字符串。我没有时间测试这是否仍然是任何主流浏览器的问题。
  3. edit2:更好的是,将btn.id打包在<p></p>代码中。

答案 2 :(得分:1)

您可以使用选择器返回的jQuery集合的length属性:

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

这是检查id存在的更好方法。因为length隐式检查nullundefined并且没有错误。