0

我在 Firefox 中收到关于 getAttribute 不是函数的错误。下面是我的代码,标有错误行。

    var nodeList = document.getElementsByTagName("input");
    for(item in nodeList){
        try{
        if(nodeList[item].getAttribute("type") == "file"){
            //ERROR HERE///->var id = nodeList[item].getAttribute("id");
            var fileSelector = document.getElementById(id);
            document.getElementById(id).addEventListener("change",function(e){
                if(e){
                    e.preventDefault();
                }

                if (fileSelector.files) {
                    window.file = fileSelector.files[0];
                } else {
                    window.file = fileSelector.value;
                }
                readData();
            });
        }
        }catch(e){}
    }
4

3 回答 3

0

试试这样:

 var nodeList = document.getElementsByTagName("input");
 var max = nodeList.length;
    for(var i=0; i<max ; i++){
        try{
        if(nodeList[i].getAttribute("type") == "file"){
            //ERROR HERE///->var id = nodeList[item].getAttribute("id");
            var fileSelector = document.getElementById(id);
            document.getElementById(id).addEventListener("change",function(e){
                if(e){
                    e.preventDefault();
                }

                if (fileSelector.files) {
                    window.file = fileSelector.files[0];
                } else {
                    window.file = fileSelector.value;
                }
                readData();
            });
        }
        }catch(e){}
    }
于 2013-01-29T16:45:28.423 回答
0

可能nodeList[item]不是节点。使用for循环而不是for..in

var i, len = nodeList.length;
for(i=0; i<len; i += 1){
    try {
        if(nodeList[i].getAttribute("type") == "file"){
            // ...
于 2013-01-29T16:45:28.943 回答
0

有关解释,请参见JSFiddle

for (item in nodeList)

给出0,12作为数组索引,这没关系。

但是它提供了更多的属性和length,它们不是 DOM 元素并且没有功能。itemnamedItemgetAttribute()

因此,正如其他人已经建议的那样,使用普通的 for 循环。

于 2013-01-29T16:52:06.070 回答