全局变量未获取函数中的更改

路易丝

我有一段代码是我从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);

我不介意我是从变量中获取字符串,还是从文档(它是表)中获取字符串,但是目前我不能执行任何操作。

卡斯珀莫希

您的变量OutString在内部声明handleFileSelectvar在其前面带有-keyword),这意味着该变量仅可用于该函数(或在该函数内部声明的函数)。

要对其进行修复,可以声明您的OutStringoutside handleFileSelect,使其可用于函数外部访问。

或者,您可以<table>通过引用id分配给它-element来获得-element

document.getElementById('mytab')

您还为FileReaders onload-event设置了回调这是通过自调用function完成的,以防止出现范围问题。function自调用返回一个新值,并将其function用作onload-event的回调由于这是一个事件,因此只会在该事件触发时(可能在您访问之前或之后OutString(在外部handleFileSelect))被调用您可以handleFileSelect像这样添加回调

function handleFileSelect(evt, callback) {
    //Removed some code to shorten the example

    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, onloadCallback) { 
                return function (e) {        
                    //Removed some code to shorten the example
                    document.getElementById('list').insertBefore(span, null);

                    if( onloadCallback && typeof onloadCallback === 'function' )
                        onloadCallback();
                };
            })(f, callback);

            //Removed some code to shorten the example
        } else {
            //Removed some code to shorten the example
    }
    //Removed some code to shorten the example
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在函数JS中更改全局变量

来自分类Dev

如何使用参数更改函数中的全局变量

来自分类Dev

jQuery更改函数内部的全局变量

来自分类Dev

如何通过函数更改全局变量?

来自分类Dev

Javascript函数更改全局变量(数组)

来自分类Dev

在 C 中没有全局变量或更改函数输入的函数内部数组的变量分配

来自分类Dev

更改全局变量

来自分类Dev

当函数具有同义局部变量时,如何在函数中获取全局变量?

来自分类Dev

PHP在函数中声明全局变量

来自分类Dev

异步函数中的Javascript全局变量?

来自分类Dev

全局变量未在函数中识别

来自分类Dev

封装在函数中的全局变量

来自分类Dev

在函数中设置全局变量

来自分类Dev

在javascript函数中设置全局变量

来自分类Dev

全局变量未在函数中定义

来自分类Dev

异步函数中的Javascript全局变量?

来自分类Dev

全局变量未在函数中识别

来自分类Dev

函数中的全局变量未更新

来自分类Dev

更改在C中循环的回调函数中的全局变量

来自分类Dev

在C中循环的回调函数中更改全局变量

来自分类Dev

将Lua中的全局变量从“全局”更改为C

来自分类Dev

目标c中的Swift全局变量和全局函数

来自分类Dev

如何从C#中的C ++ dll从带有全局变量的函数中获取返回数组?

来自分类Dev

全局变量被多个函数更改-如何在Python中声明

来自分类Dev

如何从JavaScript中的函数内部更改两个不同的全局变量

来自分类Dev

当我尝试从脚本中的函数更改全局变量时,没有任何反应吗?

来自分类Dev

在函数中对其进行更改后,Javascript全局变量保持“未定义”

来自分类Dev

jQuery全局变量值已更改也应从函数中访问

来自分类Dev

除了声明它的函数之外,如何更改python中的全局变量值?

Related 相关文章

  1. 1

    在函数JS中更改全局变量

  2. 2

    如何使用参数更改函数中的全局变量

  3. 3

    jQuery更改函数内部的全局变量

  4. 4

    如何通过函数更改全局变量?

  5. 5

    Javascript函数更改全局变量(数组)

  6. 6

    在 C 中没有全局变量或更改函数输入的函数内部数组的变量分配

  7. 7

    更改全局变量

  8. 8

    当函数具有同义局部变量时,如何在函数中获取全局变量?

  9. 9

    PHP在函数中声明全局变量

  10. 10

    异步函数中的Javascript全局变量?

  11. 11

    全局变量未在函数中识别

  12. 12

    封装在函数中的全局变量

  13. 13

    在函数中设置全局变量

  14. 14

    在javascript函数中设置全局变量

  15. 15

    全局变量未在函数中定义

  16. 16

    异步函数中的Javascript全局变量?

  17. 17

    全局变量未在函数中识别

  18. 18

    函数中的全局变量未更新

  19. 19

    更改在C中循环的回调函数中的全局变量

  20. 20

    在C中循环的回调函数中更改全局变量

  21. 21

    将Lua中的全局变量从“全局”更改为C

  22. 22

    目标c中的Swift全局变量和全局函数

  23. 23

    如何从C#中的C ++ dll从带有全局变量的函数中获取返回数组?

  24. 24

    全局变量被多个函数更改-如何在Python中声明

  25. 25

    如何从JavaScript中的函数内部更改两个不同的全局变量

  26. 26

    当我尝试从脚本中的函数更改全局变量时,没有任何反应吗?

  27. 27

    在函数中对其进行更改后,Javascript全局变量保持“未定义”

  28. 28

    jQuery全局变量值已更改也应从函数中访问

  29. 29

    除了声明它的函数之外,如何更改python中的全局变量值?

热门标签

归档