从javascript循环中的函数中检索变量

从javascript循环中的函数中检索变量,javascript,function,variables,loops,Javascript,Function,Variables,Loops,我在以下脚本中遇到问题: 当用户单击上载按钮并选择一些图像时,它会创建divs,并为每个图像添加一个图像 但是,我无法从函数中检索tba变量。我知道这个问题已经被问过好几次了,我尝试了很多不同的方法(包括函数中的reader.onload),但是我没有成功地检索到这个变量 <script type="text/javascript"> $(document).ready(function() { function readURL(input) {

我在以下脚本中遇到问题: 当用户单击上载按钮并选择一些图像时,它会创建
divs
,并为每个图像添加一个图像

但是,我无法从函数中检索
tba
变量。我知道这个问题已经被问过好几次了,我尝试了很多不同的方法(包括函数中的
reader.onload
),但是我没有成功地检索到这个变量

<script type="text/javascript">
 $(document).ready(function() {
     function readURL(input) {      
        if (input.files) {
            var tba = '';
            for (var i = 0; i < input.files.length; i++) {
                if(input.files[i]) {

                    var reader = new FileReader();

                    reader.onload = function (e) {
                            tba += '<div class="gallery_image"><img src="'+e.target.result+'" alt="Image currently not accessible" /></div>';
                    };

                    reader.readAsDataURL(input.files[i]);
                }
            }

            $('#gallery_container').html(tba);
        }
    } 
 });
</script>

$(文档).ready(函数(){
函数readURL(输入){
if(input.files){
var-tba='';
对于(var i=0;i

非常感谢您的帮助,祝您愉快。

中的变量
tba
仅在您的功能范围内可用。要访问此函数外部的
tba
,请将声明也移到该函数外部

  // global
     var tba = '';

     $(document).ready(function() { 
         function readURL(input) {      
            if (input.files) {
                tba = '';
编辑:

由于我的答案的第一部分没有提供所需的帮助,那么直接删除
tba
并进行DOM操作怎么样

您的函数应该如下所示:

<script type="text/javascript">
 $(document).ready(function() {
     function readURL(input) {      
        if (input.files) {
            $('#gallery_container').html(''); //clear the container
            for (var i = 0; i < input.files.length; i++) {
                if(input.files[i]) {

                    var reader = new FileReader();

                    reader.onload = function (e) {
                        // append your generated HTML directly
                        $('#gallery_container').append('<div class="gallery_image"><img src="'+e.target.result+'" alt="Image currently not accessible" /></div>');
                    };

                    reader.readAsDataURL(input.files[i]);
                }
            }
            // removed the dom manipulating part here
        }
    } 
 });
</script>

$(文档).ready(函数(){
函数readURL(输入){
if(input.files){
$('#gallery_container').html('')//清除容器
对于(var i=0;i
如果在函数外部定义变量,它将从函数中获取值。 这称为全局范围,否则它仅在函数范围内可用

选中此项:

var a = 30;

function foo() {
    a = 25;
}
foo();
alert(a); // will give 25
检查现场

因此,您的代码应该如下所示:

<script type="text/javascript">
 $(document).ready(function() {
     var tba = '';
     function readURL(input) {      
        if (input.files) {
            for (var i = 0; i < input.files.length; i++) {
                if(input.files[i]) {

                    var reader = new FileReader();

                    reader.onload = function (e) {
                            tba += '<div class="gallery_image"><img src="'+e.target.result+'" alt="Image currently not accessible" /></div>';
                    };

                    reader.readAsDataURL(input.files[i]);
                }
            }

            $('#gallery_container').html(tba);
        }
    } 
 });
</script>

$(文档).ready(函数(){
var-tba='';
函数readURL(输入){
if(input.files){
对于(var i=0;i
对不起,我想我的问题不够精确。问题是我无法从reader.onload=function(e)中检索tba。连接起作用,但我无法访问此函数的最终值。由于
tba
从一开始就不是全局的,请尝试我的示例,如果仍然不起作用,请报告。请查看我的编辑。我希望这能解决你的问题。事实上这正是我想到的,谢谢你的努力!你试图解决错误的问题。不要试图使变量“脱离函数”。而是在函数中使用它。此时无法检索
tba
(“#gallery\u container”).html(tba)