我遇到了使相同的网络应用程序适用于不同版本的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
方法)
谢谢
答案 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);
};
有几点需要注意:
window
对象,但对于控制台/调试我认为没关系。('' + btn.id)
强制非字符串ID(如1
,2
等)到字符串。我不确定这是不是一个问题,但我很久以前在一些浏览器中遇到一个错误,设置innerHTML = 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
隐式检查null
和undefined
并且没有错误。