У меня есть кусок кода, который я взял из html5rocks для загрузки файла, который вы перетаскиваете на свою страницу, и я изменяю его, чтобы он читал файл в строка, с которой я затем обманываю, и выводить на страницу. Этот бит работает, но я также должен иметь возможность подбирать строку вне функции, которая ее создала, и я не могу.Глобальная переменная, не собирающая изменения внутри функции
Я думаю, что это либо проблема с областью, либо, возможно, какая-то проблема обратного вызова. Во всяком случае вот код:
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; // FileList object.
var output = [];
var OutString = []; // < --my variable that I want to use
for (var i = 0, f; f = files[i]; i++) {
if (f.name.match('\.csv')) { // if 1
var Filename = decodeURI(escape(f.name));
var reader = new FileReader();
reader.onload = (function (theFile) {
return function (e) {
var contents = e.target.result;
var FileLines = contents.split("\n");
var LineCount = FileLines.length;
OutString = '<table id="mytab" border = "1" width = "90%"><tr>';
var ColCount = 1;
for (var i = 0; i < LineCount; ++i) {
OutString = // I format a table here..
}
OutString += '</tr></table>';
var span = document.createElement('span');
span.innerHTML = [OutString].join('');
document.getElementById('list').insertBefore(span, null);
};
})(f);
reader.readAsText(f);
// if format up a word document using xml here
testFunc = // I want to read the contents of OutString here
// this creates the button that opens the finished document
var OutPutLine = "<a href='data:application/msword;charset=UTF-8, " + encodeURIComponent(TestFunc) + "' ><input id='Button1' type='button' value='Open printable sheet1' /></a>";
output.push(OutPutLine);
} else {
// this triggers if its not a csv file that drag n drops
output.push('<strong>', escape(f.name), ' is not a comma seperated (.csv) file!!!!</strong>');
}
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
// Setup the dnd listeners.
var dropZone = document.getElementById('drop_zone');
dropZone.addEventListener('dragover', handleDragOver, false);
dropZone.addEventListener('drop', handleFileSelect, false);
Я не против, если я строка сформировать переменную, или забрать его из документа (это таблица), но в данный момент я не могу сделать что-либо ,
Я также пытается забрать его в этой функции - это не я? – Louise
Если вы объявите его вне 'функции', он все равно будет доступен внутри' function' (но также будет доступен для других 'функций' в пределах той же области). – kaspermoerch
Спасибо, но я попытался переместить объявление OutString выше handleFileSelect, но это не сработало. Документ.getElementById ('mytab') возвращает null. Эта вещь сводит меня с ума! – Louise