0

getAttribute が関数ではないというエラーが firefox で発生しています。以下は、エラー行がマークされた私のコードです。

    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

説明については、JSFiddleを参照してください

for (item in nodeList)

を与え0、配列インデックスとして、これは問題ありません。12

しかし、その後、DOM 要素ではなく関数を持たない、より多くのプロパティlengthitemおよび を提供します。namedItemgetAttribute()

したがって、他の人がすでに示唆しているように、通常の for ループを使用してください。

于 2013-01-29T16:52:06.070 に答える
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 に答える