Javascript 显示丢失的id

Javascript 显示丢失的id,javascript,firefox,yui,Javascript,Firefox,Yui,在不同版本的Firefox上使用相同的web应用程序时,我遇到了一些问题: var col = [{'id': 'id1'}, {'id': 'id2'}, {'id': 'id3'},{'id': 'id4'}, {'id': 'id5'}, {'id': 'id6'}, {'id': 'id7'}, {'id': 'id8'}]; doSomething(col); 如果id5不存在,则我的页面在FF8中显示良好,但在FF3.5中并非如此 有没有一种方法可以

在不同版本的Firefox上使用相同的web应用程序时,我遇到了一些问题:

var col = [{'id': 'id1'}, {'id': 'id2'}, {'id': 'id3'},{'id': 'id4'},
                {'id': 'id5'}, {'id': 'id6'}, {'id': 'id7'}, {'id': 'id8'}];
doSomething(col);
如果
id5
不存在,则我的页面在FF8中显示良好,但在FF3.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的
$。每个方法都是
方法)


谢谢

您可以通过以下方式检查缺少的元素:

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

您可以通过以下方式检查缺少的元素:

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

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

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

这是检查id是否存在的更好方法。因为
length
隐式检查
null
undefined
并不会抛出错误。

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

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

这是检查id是否存在的更好方法。因为
length
隐式检查
null
undefined
,并且不会抛出错误。

您试图访问未找到的元素上的属性或方法

更改:

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

我遇到了类似的问题,IE吞咽其他浏览器会认为是一个例外。问题源于使用
eval
(这是遗留代码,不是我写的)。我没有看过雅虎的库,但我想知道
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);
};
有几件事需要注意:

  • 我不喜欢添加到
    窗口
    对象中,但是对于控制台/调试,我认为这是可以的
  • 我有
    (''+btn.id)
    将非字符串id(如
    1
    2
    等)强制为字符串。我不确定这是否是一个问题,但我很久以前在某个浏览器中遇到一个错误,设置
    innerHTML=3
    会导致错误,因为3不是字符串。我还没来得及测试这在任何主流浏览器中是否仍然是个问题

  • edit2:更好的是,将
    btn.id
    包装在

    标记中。

    您试图访问未找到的元素上的属性或方法

    更改:

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

    我遇到了类似的问题,IE吞咽其他浏览器会认为是一个例外。问题源于使用
    eval
    (这是遗留代码,不是我写的)。我没有看过雅虎的库,但我想知道
    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);
    };
    
    有几件事需要注意:

  • 我不喜欢添加到
    窗口
    对象中,但是对于控制台/调试,我认为这是可以的
  • 我有
    (''+btn.id)
    将非字符串id(如
    1
    2
    等)强制为字符串。我不确定这是否是一个问题,但我很久以前在某个浏览器中遇到一个错误,设置
    innerHTML=3
    会导致错误,因为3不是字符串。我还没来得及测试这在任何主流浏览器中是否仍然是个问题

  • edit2:更好的是,将
    btn.id
    包装在

    标签中。

    您需要发布负责显示的代码。小对象数组无法解释问题(很可能是在
    doSomething
    方法中,与FF或IE无关)。感谢您的回复,使用doSomething的代码编辑它。您需要发布负责显示的代码。小对象数组无法解释问题(很可能是在
    doSomething
    方法中,与FF或IE无关)。感谢您的回复,使用doSomething的code编辑它。非常感谢您的回答,在访问元素属性之前测试元素是否存在帮助很大,至于eval,我将尝试挖掘yui代码,看看它是否被使用。非常感谢这个答案,在访问元素属性之前测试元素是否存在帮助很大,至于eval,我将尝试挖掘yui代码,看看它是否被使用。