Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript';要检查未定义的DOM元素的类型(即问题)_Javascript_Dom_Prototypejs_Undefined_Typeof - Fatal编程技术网

使用Javascript';要检查未定义的DOM元素的类型(即问题)

使用Javascript';要检查未定义的DOM元素的类型(即问题),javascript,dom,prototypejs,undefined,typeof,Javascript,Dom,Prototypejs,Undefined,Typeof,我希望迭代DOM元素列表(复选框),并在该列表定义的时间内继续运行。元素是'c1r1','c1r2','c1r3',等等。一旦我碰到一个未定义的元素,我就停止。问题似乎是将typeof与DOM元素一起使用 以下是违规代码: function domIsDefined(idString){ alert(idString); var isItDefined = (typeof $(idString) != 'undefined'); alert(isItDefined);

我希望迭代DOM元素列表(复选框),并在该列表定义的时间内继续运行。元素是'c1r1','c1r2','c1r3',等等。一旦我碰到一个未定义的元素,我就停止。问题似乎是将typeof与DOM元素一起使用

以下是违规代码:

function domIsDefined(idString){
    alert(idString);
    var isItDefined = (typeof $(idString) != 'undefined');
    alert(isItDefined);
    return isItDefined;
}
...
for(i=1; domIsDefined('c1r' + i); i++){
    if($('c1r' + i).checked==true){
        // do stuff
    }
}
问题的关键在于这一行:

var isItDefined = (typeof $(idString) != 'undefined');

问题是,正如我所发现的,typeof$(idString)总是返回对象,不管它是否已定义。有什么好办法做这种事吗?我想我会加入一个try-catch并尽早检查.checked属性,但这感觉很恶心。

jQuery总是返回一个对象(数组)。如果找不到具有该ID的元素,则返回数组的长度将为0

var isItDefined = ($(idString).length > 0);
更新:对于prototype,您应该检查null以查看是否找到了对象

var isItDefined = ($(idString) !== null);

jQuery总是返回一个对象(数组)。如果找不到具有该ID的元素,则返回数组的长度将为0

var isItDefined = ($(idString).length > 0);
更新:对于prototype,您应该检查null以查看是否找到了对象

var isItDefined = ($(idString) !== null);
在jQuery中,$()将始终返回一个对象。请尝试以下方法:

var isItDefined = (typeof document.getElementById(idString) != 'undefined');
在jQuery中,$()将始终返回一个对象。请尝试以下方法:

var isItDefined = (typeof document.getElementById(idString) != 'undefined');

检查数组的长度。jQuery总是返回一个jQuery实例,其中包含一个匹配元素的数组

$(idString).length > 0

检查数组的长度。jQuery总是返回一个jQuery实例,其中包含一个匹配元素的数组

$(idString).length > 0


是否有任何特定原因使您无法使用单个DOM方法(即getElementsByTagName('input')获取所有checbox并在节点集合上迭代?或者,如果使用jQuery,只需
$(':checked').each(function(){/*dostuff*/})这是使用原型,很抱歉造成混淆。我应该澄清一下。也很抱歉标题中的IE。。。我原以为它只是IE,但我的Firebug控制台刚刚关闭。是否有任何特定原因使您无法使用单个DOM方法(即getElementsByTagName('input')获取所有的checbox并在节点集合上迭代?或者,如果使用jQuery,只需
$(':checked').each(function(){/*dostuff*/})这是使用原型,很抱歉造成混淆。我应该澄清一下。也很抱歉标题中的IE。。。我原以为这只是IE,但我的Firebug控制台刚刚关闭。我的意思是,我可以自己检查。Prototype并不总是返回数组(我很确定),所以我尝试将其转换为数组。但这并没有产生任何结果。var tempA=新数组();tempA[0]=idString;变量isItDefined=($(tempA).length>0);哦,好的,很好用。对于这个例子,我想要一个!,但是这就说到了我需要的地方。@Josh-对不起,我对那里的运算符有点草率-我已经对它进行了更新,使它实际返回
true
for
null
值:)我的意思是,我可以自己检查。Prototype并不总是返回数组(我很确定),所以我尝试将其转换为数组。但这并没有产生任何结果。var tempA=新数组();tempA[0]=idString;变量isItDefined=($(tempA).length>0);哦,好的,很好用。对于这个例子,我想要一个!,但是这就说到了我需要的地方。@Josh-对不起,我对那里的操作符有点草率-我已经对它进行了更新,为
null
value:)返回
true
)我不知道这在jQuery中是否意味着什么,但它会破坏prototype。我不知道这在jQuery中是否意味着什么,但它会破坏prototype。Genius!这里的问题是,typeof在返回给定“任何其他对象”或null的“对象”时会丢失信息。不过null和HTML对象的布尔值是不同的。所以第一个!这是我真正需要的。谢谢这真漂亮!此外,我喜欢以非正统的方式使用多个运算符的疯狂解决方案。我可能不应该写这么多评论,但@jball表明,这也适用于prototype的$。我不想损害我的天才地位,但是!!在JavaScript.Genius中,将值转换为布尔值是一种非常常见的方法!这里的问题是,typeof在返回给定“任何其他对象”或null的“对象”时会丢失信息。不过null和HTML对象的布尔值是不同的。所以第一个!这是我真正需要的。谢谢这真漂亮!此外,我喜欢以非正统的方式使用多个运算符的疯狂解决方案。我可能不应该写这么多评论,但@jball表明,这也适用于prototype的$。我不想损害我的天才地位,但是!!在JavaScript中,将值转换为布尔值是一种非常常见的方法。