Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Отследить момент обновления textarea


Автор: Jin X 19.7.2015, 17:10
Читаю файл id=loadfile в textarea id=doms, при этом в span id=loadingtext записывается инфа о процессе загрузки. После загрузки надпись "Файл успешно прочитан!" появляется на 2 секунды, а затем исчезает (setTimeout).
Но вот беда! Если файл большой, то добавление его содержимого в textarea происходит длительное время (грузится он быстро, именно обновление textarea идёт долго). Т.о., если это добавление будет длится 1.5 секунды, то надпись появится всего на 0,5 секунды. А если 2 секунды и более, то она вообще не появится.
Надо, чтобы setTimeout запускался не сразу после присвоения getEl('doms').value = file.target.result;, а после того, как textarea обновится. Как это сделать?
Код
function load_from_file() {

    function msg(s, t, green) {
        var el = getEl('loadingtext');
        if (green) el.style.color = '#008000'; else el.style.color = '#900';
        el.innerHTML = s;
        if (t) setTimeout("getEl('loadingtext').innerHTML = '';", t);
    }
    
    var el = getEl('loadfile');
    if (!el.value) return;
    var file = el.files[0];
    var reader = new FileReader();
    reader.onload = function(file) {
        getEl('doms').value = file.target.result;
        msg('Файл успешно прочитан!', 2000, true);
    };
    reader.onerror = function() {
        msg('Ошибка чтения файла!', 3000);
    };
    msg('Идёт чтение файла, пожалуйста, подождите...');
    reader.readAsText(file);
}

function getEl(id) {
    return document.getElementById(id);
}

Автор: ksnk 19.7.2015, 19:33
Можно поменять сам механизм вывода сообщений пользователю. Выводить их в "бегущую строку" или "всплывающий лог" и убирать только по таймауту после движения мышкой.

А что за textarea? Случайно не текстовый редактор? Может у него свой API есть для таких случаев?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)