Javascript 显示丢失的id
在不同版本的Firefox上使用相同的web应用程序时,我遇到了一些问题: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中并非如此 有没有一种方法可以
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代码,看看它是否被使用。