Строка javascript отображается в окне предупреждения, но не в толчке массива

0

Это действительно странно, и часы поиска не нашли ответа. Я пытаюсь прочитать локальный файл с помощью javascript. Я просто выводят некоторые свойства текстового файла, включая первую строку, чтобы посмотреть, читает ли он это нормально. Кажется, это работает, за исключением одного. Когда я нажимаю кнопку "Обзор", выберите файл и нажмите "ОК", строка javascript, назначенная firstLine, будет правильно отображаться в окне предупреждения, но не в output.push. Вот основной код:

function handleFileSelect(evt) {
    var f = evt.target.files[0]; // FileList object

    var reader = new FileReader();
    reader.readAsText(f);
    reader.onload = function(e) { 
        var contents = e.target.result;
        var firstLine = contents.substr(0, contents.indexOf("\n"));
        alert( "Got the file\n" 
              +"name: " + f.name + "\n"
              +"type: " + f.type + "\n"
              +"size: " + f.size + " bytes\n"
              +"starts with: " + firstLine       //firstLine correctly shows up here
        );      
        var output = [];
        output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                  ' starts with: '+ firstLine,    //but not here
                  '</li>');
        document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
    };
  }
  document.getElementById('files').addEventListener('change', handleFileSelect, false);

У меня есть следующие две строки чуть выше тега скрипта в разделе главы:

<input type="file" id="files" />
<output id="list"></output> 

Еще одна странная вещь: если я помещаю эти две строки в раздел тела, где я их действительно хочу, элемент ввода появляется, но ничего не отображается для вывода.

Теги:

1 ответ

0
Лучший ответ

Следующие работы просто прекрасны. Обратите внимание, что я переместил последнюю строку вашего javascript в функцию, вызвавшую после завершения загрузки страницы. Я получаю текст файла как в поле предупреждения, так и на самой странице. (Google Chrome версии 32.0.1700.76 м)

<!DOCTYPE html>
<html>
<head>
<script>
function byId(e){return document.getElementById(e);}

window.addEventListener('load', mInit, false);

function mInit()
{
  byId('files').addEventListener('change', handleFileSelect, false);
}

function handleFileSelect(evt) {
    var f = evt.target.files[0]; // FileList object

    var reader = new FileReader();
    reader.readAsText(f);
    reader.onload = function(e) { 
        var contents = e.target.result;
        var firstLine = contents.substr(0, contents.indexOf("\n"));
        alert( "Got the file\n" 
              +"name: " + f.name + "\n"
              +"type: " + f.type + "\n"
              +"size: " + f.size + " bytes\n"
              +"starts with: " + firstLine       //firstLine correctly shows up here
        );      
        var output = [];
        output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                  ' starts with: '+ firstLine,    //but not here
                  '</li>');
        document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
    };
  }
</script>
<style>
</style>
</head>
<body>
    <input type="file" id="files" />
    <output id="list"></output> 
</body>
</html>
  • 0
    Я внес изменения, которые вы предложили, но все еще получаю тот же результат. Я также попробовал это в chrome (версия 32.0.1700.76 m), но там тоже получил тот же результат. Поскольку ваша работа сработала, меня интересует, имеет ли это отношение к размеру читаемого файла. Мой 400K. Я только что создал тестовый текстовый файл с 2 вкладышами, и это действительно работает. Не уверен, как заставить это работать для файла 400K.
  • 0
    Теперь это кажется странным для меня. Я только что попробовал это с 1600x1000px PNG-файлом. Файл имеет размер 955 КБ, и хотя содержимое является двоичным и явно не очень хорошо печатается (так как в заголовке есть нулевой символ, который завершает вывод), он производит следующий вывод на странице (а также некоторые выходные данные в сообщении: box) bamboo.png (image/png) - 978701 bytes, last modified: 23/12/2013 starts with: �PNG Очень странно, bamboo.png (image/png) - 978701 bytes, last modified: 23/12/2013 starts with: �PNG закладки.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню