2016-11-07 2 views
1

Я пытаюсь получить локальный файл из системы, я сделал несколько поисков и нашел способ сделать это, когда я попытался реализовать его в своем коде, я получил ошибку:javascript file reader on button click error: undefined refference

Uncaught TypeError: Cannot read property 'type' of undefined

document.getElementById('add-new-cat').addEventListener('click', handleFileSelect, false); 
 

 
function handleFileSelect(evt) { 
 
    var files = evt.target.files; 
 

 
    if(files.type.match('image.*')) { 
 
     var reader = new FileReader(); 
 
     reader.onload = (function(theFile) { 
 
      
 
     })(files); 
 

 
     var catIMG = reader.readAsBinaryString(files); 
 
     alert(catIMG);  
 
    } 
 
}
<input type="file" name="cat_path_orig" id="cat-path-orig"> 
 
<button class="btn btn-primary" id="add-new-cat">add</button>

Я не знаю, как вызвать функцию с включенным файлом, потому что я знаю, что он ищет значение в кнопке, которая будучи щелкнуло

+0

Где вы принимаете ошибку? Какая линия? – epascarello

+0

@ T.J.Crowder Я предоставил фрагмент – Grey

+0

@epascarello Я добавил комментарий к строке, где возникла ошибка – Grey

ответ

2

Объект события click не имеет свойства files. Я думаю, что вы ищете files собственности на input type="file" объекта:

document.getElementById('add-new-cat').addEventListener('click', handleFileSelect, false); 
 

 
function handleFileSelect(evt) { 
 
    var files = document.getElementById("cat-path-orig").files; // **** 
 

 
    console.log("files.length: " + files.length); 
 
    Array.prototype.forEach.call(files, function(file) { 
 
    console.log(file.name + ": " + file.type); 
 
    }); 
 
}
<input type="file" name="cat_path_orig" id="cat-path-orig"> 
 
<button class="btn btn-primary" id="add-new-cat">add</button>

Несколько других примечаний:

  1. Вы хотите посмотреть на type свойство для каждого отдельного файла (см. фрагмент выше). В вашем примере будет только один (потому что нет атрибута multiple на input type="file"), поэтому вы можете просто использовать files[0], а не цикл, который я использовал выше.

  2. Неправильное использование вами readAsBinaryString; here's an answer with a correct example.

+0

Отличный ответ, опять же, извините за путаницу, по-видимому, голландские ошибки сильно отличаются от ошибок на английском языке, я постараюсь изо всех сил дать правильные английские ошибки. время. – Grey